2009-11-05 107 views
26

是否有一個原因是list.append評估爲false?還是僅僅是成功時返回0的C約定呢?爲什麼list.append評估爲false?

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

一個可能更好地表達:*爲什麼蟒蛇不使用'Builder'模式..所以我們可以做'u.append(6)。附加(7)。這是很煩人的。 – javadba 2017-05-07 01:16:10

回答

35

是變異的容器就地回None大多數Python方法 - 的Command-query separation原則的應用程序。 (Python總是對事情合理務實,所以有些增變器在獲得它時會返回一個可用值,否則會很昂貴或是一團糟 - pop方法就是這種實用主義的一個很好的例子 - 但這些絕對是例外,而不是規則,並且沒有理由使append成爲例外)。

+0

我在寫作的時候遇到了問題(y.append(5)和(yield y))期望一個成功的列表除了(間接)評估爲假。 – diciu 2009-11-05 18:56:34

18

None計算爲False和蟒蛇不返回假設任何事情又回到None功能。

如果鍵入:

>> print u.append(6) 
None 

Tadaaam :)

+6

更新列表的mutators(如追加,擴展,排序等)不返回值。 – 2009-11-05 18:41:47

+0

'None'不會*評估*爲'False'。 – SwiftsNamesake 2016-11-19 14:23:02

+0

@SwiftsNamesake試試'bool(無)' – 2017-02-15 09:49:59

5

它修改就地列表,並返回NoneNone評估爲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 
相關問題