Подтвердить что ты не робот

Почему при добавлении в этом коде возвращается None?

list = [1, 2, 3]
print list.append(4)   ## NO, does not work, append() returns None
## Correct pattern:
list.append(4)
print list  ## [1, 2, 3, 4]

Я изучаю Python, и я не уверен, является ли эта проблема специфической для языка и как append реализовано в Python.

4b9b3361

Ответ 1

append - мутирующая (деструктивная) операция (она изменяет список на месте, а не возвращает новый список). Идиоматический способ сделать неразрушающий эквивалент append будет

l = [1,2,3]
print l + [4] # [1,2,3,4]
print l # [1,2,3]

чтобы ответить на ваш вопрос, я предполагаю, что, если append вернул недавно измененный список, пользователи могут подумать, что он не является деструктивным, то есть они могут написать такой код

m = l.append("a")
n = l.append("b")

и ожидаем, что n будет [1,2,3,"b"]

Ответ 2

Это соглашение в Python, что методы, которые мутируют последовательности, возвращают None.

Рассмотрим:

>>> a_list = [3, 2, 1]
>>> print a_list.sort()
None
>>> a_list
[1, 2, 3]

>>> a_dict = {}
>>> print a_dict.__setitem__('a', 1)
None
>>> a_dict
{'a': 1}

>>> a_set = set()
>>> print a_set.add(1)
None
>>> a_set
set([1])

Начиная с Python 3.3, теперь это более явно документировано:

Некоторые классы коллекций изменяемы. Методы, которые добавляют, вычитают, или переставить их члены на место, и не возвращать определенный элемент, никогда не возвращать экземпляр коллекции, а None.

Часто задаваемые вопросы о дизайне и истории приводят аргументацию за этим проектным решением (в отношении списков):

Почему doesnt list.sort() возвращает отсортированный список?

В ситуациях, когда важна производительность, составление копии списка просто сортировать было бы расточительно. Поэтому list.sort() сортирует список на месте. Чтобы напомнить вам об этом, он не возвращается отсортированный список. Таким образом, вас случайно не обманут переписывание списка, когда вам нужна отсортированная копия, но также необходимо сохранить несортированная версия вокруг.

В Python 2.4 добавлена ​​новая встроенная функция - sorted(). Эта функция создает новый список из предоставленного итерации, сортирует его и возвращает его.

Ответ 3

Одним из советов было бы избегать использования ключевых слов или функций в качестве имен переменных. В приведенном выше коде вы используете список в качестве переменной:

list = [1, 2, 3]

Я бы не советовал использовать list в качестве имени переменной, поскольку список на самом деле уже определен как встроенный тип. Как отметили ChaseTheSun и squiguy, тут ничего особенного

l = [1, 2, 3]
l.append(4)
print l  ## [1, 2, 3, 4]

Ответ 4

Ничего не возвращает. он добавляет/добавляет к переменной, чтобы увидеть, что вы должны использовать первую переменную, которая использовалась для добавления в печать

friends=["Rajendra V"]
friends.append("John")
print(friends)