Pythonで偽と判定される値

pythonではどのようなオブジェクトでも、真理値(Boolean)として判定することができ、if や while の条件として使えます。

偽と定義されている定数

FalseNone
Falseは当然ですが、Noneも偽扱いなんですね。

偽と判定される数値

数値型ではゼロが偽として判定されます。
つまり以下のものです。

  • int型 0
  • float型 0.0
  • complex型 0j
  • Decimal(0)
  • Fraction(0, 1)

逆に上記のもの以外は、全て真として扱われるため無限ループは以下のように短く書くことができます。

while 1:
    printf("Hello World!")

偽と判定されるシーケンス コレクション

空のシーケンスまたはコレクションが偽と判定されます。

つまり

  • 空の文字列(str) ''
  • 空のタプル(tuple) ()
  • 空のリスト(list) []
  • 空の辞書(dict) {}
  • 空のセット(set) set()
  • 範囲ゼロのrangeオブジェクトrange(0)

その他偽と判定される値

オブジェクトは、デフォルトでは真と判定されます。
ただし、そのクラスが__bool__()メソッドを定義していて、それが False を返す場合

または__len__()メソッドを定義していて、それが 0 を返す場合は偽と判定されます。

また、__bool__()__len__()が両方定義されている場合は__bool__()のほうが優先されるようです。(Python3.6にて確認)

class a: # 真と判定される
    def __bool__(self):
        return True
    def __len__(self):
        return 1

class b: # 真と判定される
    def __bool__(self):
        return True
    def __len__(self):
        return 0

class c: # 偽と判定される
    def __bool__(self):
        return False
    def __len__(self):
        return 1

class d: # 偽と判定される
    def __bool__(self):
        return False
    def __len__(self):
        return 0

この辺りをより詳しく知りたい場合は、Pythonの公式ドキュメントに詳しく載っています。

https://docs.python.jp/3/library/stdtypes.html#truth-value-testing