boolean のリテラル値に対してチェックしていますFalse
。同じ'A' == False
ことはありません。
キャストすると、違いがわかります。
>>> l = []
>>> l is True
False
>>> l is False
False
>>> l == True
False
>>> l == False
False
>>> bool(l) == False
True
その理由False == False
は、同じオブジェクトを比較しているためです。2 == 2
またはと同じ'A' == 'A'
です。
if l:
困難は、このチェックに合格しないようなものを見ると起こります。これは、アイテムの真価をチェックしているためです。慣例により、これらの項目はすべてブール値チェックに失敗します。つまり、ブール値は次のようになりますFalse
。
None
False
(明らかに)
- 空のシーケンス:
''
, []
,()
- 任意の「ゼロ」値:
0
、0.0
など。
- 空のコレクション:
{}
(空の辞書)
- を
len()
返すものすべて0
これらは「偽の」値と呼ばれます。それ以外はすべて「真」です。これは、次のような奇妙なことにつながる可能性があります。
>>> def foo():
... pass
...
>>> bool(foo)
True
ここで、明示的な値を返さないメソッドは常にNone
戻り値の型を持っていることに注意してください。これにより、次のようになります。
>>> def bar():
... x = 1+1
...
>>> bool(bar)
True
>>> bool(bar())
False