def yasuharu519(self):

日々の妄想

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

あとがき

こういう部分きちんと理解しておくの大事