Вопрос-Ответ

Why does list.append evaluate to false in a boolean context? [duplicate]

Почему list.append принимает значение false в логическом контексте?

Есть ли причина, по которой list.append принимается значение false? Или это просто соглашение C о возврате 0 в случае успеха, которое вступает в игру?

>>> u = []
>>> not u.append(6)
True
Переведено автоматически
Ответ 1

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

Ответ 2

None принимает значение False а в python предполагается, что функция, которая ничего не возвращает, вернула None.

Если вы введете:

>> print u.append(6)
None

Тадааам :)

Ответ 3

поскольку .append метод возвращает значение None, следовательно, not None принимает значение True. Python при ошибке обычно выдает ошибку:

>>> a = ()
>>> a.append(5)
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a.append(5)
AttributeError: 'tuple' object has no attribute 'append'
Ответ 4

Он изменяет список на месте и возвращает None. None принимает значение false .

python list