2009-11-05 11 views
26

list.appendが偽に評価されている理由はありますか?それとも、うまくいっているときに0を返すというCの規則ですか?なぜlist.appendはfalseに評価されますか?

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

Aフレーズに、おそらくより良い方法:*なぜPythonは.. 'Builder'パターンを使用していないので、我々は' u.append(6)を行うことができます。 append(7)を追加します。 .. *これは迷惑です。 – javadba

答えて

35
コンテナインプレースリターン Noneを変異

ほとんどのPythonのメソッドを返します。 (Pythonは常に物事について合理的に実用的であるため、そうでなければ高価なものや混乱を招く場合があります。popメソッドがこのプラグマティズムの良い例です - しかし、それらは間違いなく例外です。ルール、そしてappendを例外にする理由はありません)。

+0

私は書いている間に(y.append(5)と(yield y))問題にぶつかりました成功したリストの追加が(間接的に)falseに評価されることを期待してください。 – diciu

18

NoneFalseに評価し、Pythonで何も返さない関数はNoneを返したと想定されます。

あなたが入力した場合:

>> print u.append(6) 
None 

Tadaaamを:)

+6

リストを更新するミューテータ(append、extend、sortなど)は値を返しません。 –

+0

'None'は*評価する*' False'にはなりません。 – SwiftsNamesake

+0

@SwiftsNamesake 'bool(None)'を試してください。 –

5

それはその場でリストを変更して、Noneを返します。 Noneはfalseと評価されます。

4

.appendメソッドがNoneを返すので、not NoneTrueと評価されます。エラー時にPythonは通常、エラーが発生します - Command-query separationの原理を応用し

>>> 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 
関連する問題