ホーム > 記事 > Python > python入門 > 【Python】True、Falseと真理値判定、ブール演算と比較

記事

【Python】True、Falseと真理値判定、ブール演算と比較

今回はboolであるTrueとFalseをpythonがどのように判定するかの真理値判定、bool同士の演算をおこなうbool演算、比較について述べます。

目次

  1. 真理値判定とは
  2. bool演算とは
  3. 比較
  4. まとめ

 

真理値判定とは

TrueかFalesかを判定することを真理値判定といいます。pythonではどんなオブジェクトでも真理値として判定できるようになっています。そしてifやwhileの条件や、あるいはbool演算をおこなえるようになっています。

短く、簡潔なコードを記述するにはこの真理値判定について知っておくことが大切です。どのようなときにTrueと判別され、どのようなときにFalseと判別されるのか知っておきましょう。

  • クラスが__bool__()メソッドを定義している場合は__bool__()が返す値で判別される
  • __len__()メソッドを定義していて長さが0のときFalseと判定される
  • 数字のゼロ
  • 上記以外はTrueと判定される

オブジェクトや値がどのように判別されるかは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になります。

  • None、False
  • 0、0.0、0j、Decimal(0)、Fraction(0,1)
  • ''、()、[]、{}、set()、range(0)

オブジェクトについて確認します。

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演算といいます。最初のものほど優先順位が高いです。ただし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__()メソッドなど普段気にしない部分についても記載してみました。

↑目次

この記事へのコメント

コメントはまだありません。

コメントを送る

必須
必須  
※ メールアドレスは公開されません
任意
必須
Loading...  画像の文字を入力してください