Есть ли причина list.append
оценка false? Или это просто соглашение C о возвращении 0, когда это успешное, что входит в игру?Почему list.append оценивается как false?
>>> u = []
>>> not u.append(6)
True
Есть ли причина list.append
оценка false? Или это просто соглашение C о возвращении 0, когда это успешное, что входит в игру?Почему list.append оценивается как false?
>>> u = []
>>> not u.append(6)
True
методы Большинство Python, которые мутируют контейнер на месте возврата None
- применение принципа Command-query separation. (Python всегда разумно прагматичен в отношении вещей, поэтому некоторые мутаторы действительно возвращают полезную ценность, когда получение в противном случае будет дорогостоящим или беспорядочным - метод pop
является хорошим примером этого прагматизма - но это, безусловно, исключение, а не правило, и нет причины делать исключение append
).
Я столкнулся с проблемой при записи (y.append (5) и (yield y)), где я не ожидайте успешного добавления списка (косвенно) к false. – diciu
None
вычисляет False
и питона функция, которая не возвращает ничего предполагается, вернулись None
.
Если вы наберете:
>> print u.append(6)
None
Tadaaam :)
Мутаторы (например, добавление, расширение, сортировка и т. Д.), Которые обновляют список, не возвращают значение. –
'Нет' не * оценивает * на' False'. – SwiftsNamesake
@SwiftsNamesake Попробуйте 'bool (None)' –
Он изменяет список на месте, и возвращает None
. None
оценивает значение false.
т.к. .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'
На самом деле, она возвращает None
>>> print u.append(6)
None
>>> print not None
True
>>>
Функция list.append
возвращает None
, она просто добавляет значение к списку, который вы используете, для вызова этого метода.
Вот что-то, чтобы сделать вещи яснее:
>>> u = []
>>> not u
False
>>> print(u.append(6)) # u.append(6) == None
None
>>> not u.append(6) # not None == True
True
Возможно, более лучший способ выражения: * почему питон не использовать 'Builder' рисунок .. так что мы можем сделать' u.append (6). добавление (7). .. * * Это раздражает. – javadba