2009-11-05 5 views
26

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

>>> u = [] 
>>> not u.append(6) 
True 
+0

Возможно, более лучший способ выражения: * почему питон не использовать 'Builder' рисунок .. так что мы можем сделать' u.append (6). добавление (7). .. * * Это раздражает. – javadba

ответ

35

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

+0

Я столкнулся с проблемой при записи (y.append (5) и (yield y)), где я не ожидайте успешного добавления списка (косвенно) к false. – diciu

18

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

Если вы наберете:

>> print u.append(6) 
None 

Tadaaam :)

+6

Мутаторы (например, добавление, расширение, сортировка и т. Д.), Которые обновляют список, не возвращают значение. –

+0

'Нет' не * оценивает * на' False'. – SwiftsNamesake

+0

@SwiftsNamesake Попробуйте 'bool (None)' –

5

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

4

т.к. .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' 
3

На самом деле, она возвращает None

 

>>> print u.append(6) 
None 
>>> print not None 
True 
>>> 
 
0

Функция list.append возвращает None, она просто добавляет значение к списку, который вы используете, для вызова этого метода.

Вот что-то, чтобы сделать вещи яснее:

>>> u = [] 
>>> not u 
False 
>>> print(u.append(6)) # u.append(6) == None 
None  
>>> not u.append(6) # not None == True 
True 
Смежные вопросы