Pythonにおける真偽判定について
Pythonには組み込みオブジェクトや組み込み関数と言われている標準ライブラリを利用して
真偽判定を行うことが可能です。
標準ライブラリとは、いわゆるインポート文を定義せずに利用可能なデフォルトで用意されているライブラリを指します。
Python基本構文については【Python入門】基礎構文のまとめでまとめてますので、参考にしてください。
真偽判定についての解説
if文やwhile文等での真偽判定をする際に利用します。
偽と判定するものには以下のものがあります。
| オブジェクト | Falseと判定されるオブジェクト例 |
|---|---|
| 定数 |
None False
|
| 数値型 |
0 0.0
|
| 空文字列または空のコレクション等 |
'' {} [] set() range(0)
|
-
'':空の文字列となります -
{}:空の辞書または重複しない要素を保持するコレクションとなります -
[]:空のコレクションとなります -
set():重複しない要素を保持するコレクションとなります。{}と同義となります -
range(0):数列を生成するオブジェクトとなります。0を指定することで空の数列となります
定数での判定
True以外は偽と判定されるため、出力されません。
for i in [None, False, True]:
if i: print(i)
数値型での判定
ゼロは偽と判定されるため、0 0.0は出力されません。
for i in [0, 0.0, 1, -1]:
if i: print(i)
空文字列または空のコレクション等での判定
空の文字列、空のコレクションについては、偽と判定されるため、出力されません。
for i in [ '', {}, [], set(), range(0) ]:
if i: print(i)
オブジェクトについて
オブジェクトについてはデフォルト真と判定されますが、クラスにboolメソッド、lenメソッドが定義されている場合、メソッド定義から判定されます。
- クラスに
boolメソッドが定義されている場合、Falseを返却する場合、偽と判定される - クラスに
lenメソッドが定義されている場合、0を返却する場合、偽と判定される
※boolメソッドが定義されている場合は、boolメソッド定義の判定が優先されます。
サンプルコードを作成しましたので、bool lenメソッドをそれぞれコメント化して実行結果を確認してみてください。
for i in [ Example(True, 1), Example(True, 0), Example(False, 1), Example(False, 1)]:
if i: print(i)
class Example:
def __init__(self, flg: bool, length: int):
self.flg = flg
self.length = length
def __bool__(self) -> bool:
return self.flg
def __len__(self) -> int:
return self.length
def __str__(self) -> str:
return f"flg:{self.flg}, length:{self.length}"
まとめ
真偽判定について解説しました。
以下については、if文、while文の判定処理では偽と判定されます。
- None
- False
- 0 or 0.00
- 空の文字列
- 空のコレクション
判定処理に迷った場合は参考にしてください。