Pythonで偽と判定される値
pythonではどのようなオブジェクトでも、真理値(Boolean)として判定することができ、if や while の条件として使えます。
偽と定義されている定数
False
とNone
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