PythonでTrue/Falseと判断されるオブジェクト
まえがき
「PythonでTrue/Falseと判断されるオブジェクトについて例を挙げてください」
という問に対してうまく答えることができなかったのでまとめた。Javascriptなんかは真/偽判断されるものがややこしかったようなイメージがあるけど、Pythonは結構シンプル。きちんと理解できてなかったことが恥ずかしい。
Javascript/Ruby/Perlとかの他のスクリプト言語での比較もしてみたい。(もう誰かまとめてるかもしれないけど)
真値チェック
v2.2.1から追加されてるbool()関数を使うことで、オブジェクトの真値チェックが行える。また、調べてたらドキュメントにFalseを返すオブジェクトがまとめられてた。Python Document v2.7.3
- None
- False
- zero of any numeric type, for example, 0, 0L, 0.0, 0j.
- any empty sequence, for example, '', (), .
- any empty mapping, for example, {}.
- instances of user-defined classes, if the class defines a nonzero() or len() method, when that method returns the integer zero or bool value False.
上のもの以外はすべてTrueと判断される。
一応試してみた
ドキュメントにもまとめられてるので、これ以上何も言えず、ぐうの音も出ないが、一応ひと通り試してみた。
>>> bool(None)
False
>>> bool(False)
False
>>> bool(0)
False
>>> bool(0L)
False
>>> bool(0.0)
False
>>> bool(0j)
False
>>> bool('')
False
>>> bool()
False
>>> bool({})
False
>>> bool(())
False
>>> bool({})
False
>>> bool(True )
True
>>> bool(0.1)
True
>>> bool(1j)
True
>>> bool(1)
True
>>> bool({None : None})
True
>>> class Test(object):
... def __len__(self):
... return 0
...
>>> test = Test()
>>> bool(test)
False
>>> class Test(object):
... def __len__(self):
... return True
...
>>> test = Test()
>>> bool(test)
True
>>> bool(lambda x:x)
True
>>> bool((x for x in range(10)))
True
あとがき
こういう部分きちんと理解しておくの大事