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