Pythonでは真理値(真偽値)をブール値FalseまたはTrueで表します。
どのオブジェクトもTrueまたはFalseとして判定でき、if文などの条件に使用できます。また、 組込み関数bool()を使うとオブジェクトを真理判定に基づいてブール値に変換することができます。
本記事ではbool()によるブール値の確認方法、およびPythonの真理(真偽)判定についてまとめます。
ブール値
ブール値 は定数オブジェクトTrueとFalseの2つのみをとります。これらは真理値(真偽値)を表すために用いられます。
>>> type(True)
<class 'bool'>
>>> type(False)
<class 'bool'>
また、ブール値は数値処理の中で使われる場合はそれぞれ、
- True → 1
- False → 0
と同様に扱われます。
>>> 1 + False
1
>>> 1 + True
2
bool関数の使い方
組込み関数bool() は、オブジェクトや演算式等を真理値判定 に基づいて、
- 真の場合:True
- 偽の場合:False
に変換します。
使い方は下記の通りです。
bool([x])
引数xは判定したいオブジェクトや演算式を設定します。
具体例を以下に示します。
>>> x = "ABC"
>>> bool(x)
True
>>> a = 1
>>> b = 1
>>> bool(a == b)
True
>>> a = 1
>>> b = 2
>>> bool(a == b)
False
オブジェクトの真理(真偽)判定について
Pythonのオブジェクトは真理値(True または False)として判定できます。
Falseとして定義されたオブジェクトを除き、 デフォルトではTrueとなります。
>>> x = 10 # 整数
>>> bool(x)
True
>>> x = 'abc' # 文字列
>>> bool(x)
True
>>> x = [1, 2] # リスト
>>> bool(x)
True
>>> x = {'a', 1} # 辞書
>>> bool(x)
True
>>> class Myclass: # クラス
... a = 1
...
>>> bool(Myclass)
True
オブジェクトが下記を定義していた場合はFalseと判定されます。
- __bool__() メソッドが定義されていて、それが False を返す場合
>>> class Myclass2:
... def __bool__(self):
... return False
...
>>> x = Myclass2()
>>> bool(x)
False
>>> class Myclass3:
... def __len__(self):
... return 0
...
>>> x = Myclass3()
>>> bool(x)
False
以下の組み込みオブジェクトはFalseと判定されます。
- Falseと定義されている定数: None, False
>>> bool(None)
False
>>> bool(False)
False
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool(0j)
False
>>> import decimal
>>> bool(decimal.Decimal(0))
False
>>> import fractions
>>> bool(fractions.Fraction(0, 1))
False
>>> bool("")
False
>>> bool([])
False
>>> bool(())
False
>>> bool({})
False
>>> bool(set())
False
>>> bool(range(0))
False
またオブジェクトの真理判定は、if文やwhile文の条件やブール演算の被演算子として使えます。
- if文の条件
>>> if 'abc': # 'abc'はTrue
... print("It's true")
... elif False:
... print("It's false")
...
It's true
>>> if "": # ""はFalse
... print("It's true")
... else:
... print("It's false")
...
It's false
この場合、被演算子のうちの一つが返るので注意が必要です。
# x and y: x がFalseなら x, そうでなければ y
>>> "abc" and ""
''
# x or y: x がFalseなら y, そうでなければ x
>>> "abc" or ""
'abc'
<参考記事>
[Python]論理演算 and, or, notについて
Pythonの論理演算子(or, and, not)は、一般的なorやandの考え方と少し違う部分があります。本記事ではそのあたり注意点も含めて、まとめました。
環境
- OS: Ubuntu20.04LTS
- Python3.9.7
まとめ
- 標準組込み関数bool()を使って真理値判定(True or False)の結果を確認することができる
- オブジェクトはデフォルトではTrueを返すが、Falseを返す様定義されたクラスや標準オブジェクト(数値型の0や空のシーケンス)もある
- 参考資料公式リファレンス – 組み込み型 – 真理値判定