list.append
が偽に評価されている理由はありますか?それとも、うまくいっているときに0を返すというCの規則ですか?なぜlist.appendはfalseに評価されますか?
>>> u = []
>>> not u.append(6)
True
list.append
が偽に評価されている理由はありますか?それとも、うまくいっているときに0を返すというCの規則ですか?なぜlist.appendはfalseに評価されますか?
>>> u = []
>>> not u.append(6)
True
None
を変異
ほとんどのPythonのメソッドを返します。 (Pythonは常に物事について合理的に実用的であるため、そうでなければ高価なものや混乱を招く場合があります。pop
メソッドがこのプラグマティズムの良い例です - しかし、それらは間違いなく例外です。ルール、そしてappend
を例外にする理由はありません)。
私は書いている間に(y.append(5)と(yield y))問題にぶつかりました成功したリストの追加が(間接的に)falseに評価されることを期待してください。 – diciu
None
False
に評価し、Pythonで何も返さない関数はNone
を返したと想定されます。
あなたが入力した場合:
>> print u.append(6)
None
Tadaaamを:)
リストを更新するミューテータ(append、extend、sortなど)は値を返しません。 –
'None'は*評価する*' False'にはなりません。 – SwiftsNamesake
@SwiftsNamesake 'bool(None)'を試してください。 –
それはその場でリストを変更して、None
を返します。 None
はfalseと評価されます。
.append
メソッドがNone
を返すので、not None
はTrue
と評価されます。エラー時に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'
実際には、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
Aフレーズに、おそらくより良い方法:*なぜPythonは.. 'Builder'パターンを使用していないので、我々は' u.append(6)を行うことができます。 append(7)を追加します。 .. *これは迷惑です。 – javadba