今回はboolであるTrueとFalseをpythonがどのように判定するかの真理値判定、bool同士の演算をおこなうbool演算、比較について述べます。
目次
今回はboolであるTrueとFalseをpythonがどのように判定するかの真理値判定、bool同士の演算をおこなうbool演算、比較について述べます。
TrueかFalesかを判定することを真理値判定といいます。pythonではどんなオブジェクトでも真理値として判定できるようになっています。そしてifやwhileの条件や、あるいはbool演算をおこなえるようになっています。
短く、簡潔なコードを記述するにはこの真理値判定について知っておくことが大切です。どのようなときにTrueと判別され、どのようなときにFalseと判別されるのか知っておきましょう。
オブジェクトや値がどのように判別されるかはbool()関数を使って知ることができます。
$ py
Python 3.9.2 (tags/v3.9.2:1a79785, Feb 19 2021, 13:44:55) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> bool(False)
False
>>> bool(None)
False
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool(0j)
False
>>> from decimal import Decimal
>>> bool(Decimal(0))
False
>>> bool("")
False
>>> bool(())
False
>>> bool([])
False
>>> bool({})
False
>>> bool(set())
False
>>> bool(range(0))
False
以上をまとめると以下はすべてFalseになります。
オブジェクトについて確認します。
class Abc:
c: int = 0
abc=Abc()
print(bool(abc))
実行結果
True
オブジェクトを判定するとTrueになります。このオブジェクトに__bool__()メソッドを定義します。
class Abc:
c: int = 0
def __bool__(self):
return bool(self.c)
abc=Abc()
print(bool(abc))
実行結果
False
__bool__()メソッドが評価され結果がFalseになっているのがわかります。
真偽値同士の演算をbool演算といいます。最初のものほど優先順位が高いです。ただしbool演算子は非ブール演算子よりも優先度が低いため注意してください。
演算 | 結果 |
---|---|
not x | xがTrueならFalse、xがFalseならTrue |
x and y | xとyが両方TrueならTrue、それ以外はFalse |
x or y | xとyがFlaseの場合False、それ以外はTrue |
bool演算では左側の評価だけで結果が決まる場合、右側の評価はおこないません。例えば x and yでxがFalseの場合 yの値が何であれ Falseが確定するため、xのみを評価しyは評価せずに、x and yの結果であるFalseを返します。x or yでxがTrueの場合、yの値がなんであれTrueになるのでyは評価せずにx or yはTrueの値を返します。
Pythonには以下の比較演算があります。優先順位はすべて同等で左側から評価されます。
演算 | 意味 |
---|---|
< | より小さい |
<= | 以下 |
> | よりおおきい |
>= | 以上 |
== | 等しい |
!= | 等しくない |
is | 同一のオブジェクトである |
is not | 同一のオブジェクトでない |
bool演算と同じように結果が確定した場合には右側の演算については評価されません。
例えば x < y < z で x < y がFalseの場合 zは評価されずFalseになります。
今回は真理値判定や、bool演算、比較について述べました。これらのことを知っているとコンパクトにソースコードを記述することができます。
クラスに実装された__bool__()メソッドなど普段気にしない部分についても記載してみました。
この記事へのコメント
コメントはまだありません。
コメントを送る