Python での短絡評価

Preet Sanghavi 2023年6月21日
  1. Python の論理演算子
  2. 短絡とは
  3. Python での AND 演算子を使用した短絡
  4. Python での OR 演算子を使用した短絡
Python での短絡評価

この記事では、論理演算子を使用して Python で短絡動作を示すことについて説明します。

Python の論理演算子

OR 演算子

OR: 両方のオペランドは、Python の or 演算子を使用して評価されます。 or 演算子は、オペランドのいずれかが True の場合に True を返します。

ただし、or 演算子は、指定されたすべての式またはオペランドが False を返す場合にのみ False を返します。

OR 演算子の論理表:

最初の値 セカンドバリュー 出力
真実 真実 真実
真実 間違い 真実
間違い 真実 真実
間違い 間違い 間違い

Python コンソールでの上記の OR 演算子の表現:

>>> True or True
True
>>> True or False
True
>>> False or True
True
>>> False or False
False

Python では、OR 演算子を使用して複数の式を比較することもできます。

>>> (5 < 10) or (8 < 5)
True
>>> (5 < 10) or (8 < 5) or (2 == 2) or (9 != 8)
True

AND 演算子

AND: Python の and 演算子を使用すると、両方のオペランドが評価され、指定された式または演算子が true でない場合は、False が返されます。 and 演算子は、指定された式またはオペランドの両方が True の場合にのみ True を返します。

AND 演算子の論理表:

最初の値 セカンドバリュー 出力
真実 真実 真実
真実 間違い 間違い
間違い 真実 間違い
間違い 間違い 間違い

Python コンソールでの上記の AND 演算子の表現:

>>> True and True
True
>>> True and False
False
>>> False and True
False
>>> False and False
False

AND 演算子を使用した複数の式の比較。

>>> (5 < 10) and (8 < 5)
False
>>> (5 < 10) and (8 < 5) and (2 == 2) and (9 != 8)
False
>>> (10 == 10) and (8 != 5) and (2 == 2) and (9 != 8)
True

短絡とは

短絡とは、式の真理値がすでに確立されている場合にブール演算が終了することを指します。 Python インタープリターは、式を左から右に評価します。

Python の多数のブール演算子と関数では、短絡が可能です。

def exp(n):
    print("Hello")
    return n

ショートサーキットがどのように行われるかを確認するために、上記の関数をオペランドまたは式の 1つとして使用します。Python インタープリターが実行すると、"Hello" という単語が出力されます。

Python での AND 演算子を使用した短絡

and 演算子の使用:

>>> True and exp(1)
Hello
1

Python インタープリターは、上記のコードでコードを左から右に評価します。 AND 演算子のロジック テーブルによると、True ブール値を取得するには、式が True である必要があります。

最初の値が True に設定されているため、Python インタープリターは関数のみを評価します。

初期値を False に設定するとどうなるでしょうか? 以下のコードを確認してください。

>>> False and exp(1)
False

初期値は False に設定されているため、Python インタープリターは後者の式を無視し、実行時間を節約します。

式の交換:

>>> exp(1) and True
Hello
True
>>> exp(1) and False
Hello
False

これらのコードでは、最初の式は以前に作成した関数です。 Python インタープリターは、最初に指定された関数を評価し、"Hello" という出力を生成します。

注: 作成した関数は、エラーまたは False ブール値を生成しません。 したがって、Python インタープリターは、and 演算子が使用されたときに前者が指定された関数である場合、常に後者の式を評価する必要があります。

Python での OR 演算子を使用した短絡

or 演算子の使用:

>>> True or exp(1)
True

コードを左から右に評価します。 初期値を True に設定すると、Python インタープリターは、指定された関数である後者の式の実行を無視できます。

したがって、指定された OR 演算子の論理表によると、出力は True になります。

>>> False or exp(1)
Hello
1

前者の値が False に設定されているため、Python インタープリターは上記のコードの関数を実行します。

式の交換:

>>> exp(1) or True
Hello
1
>>> exp(1) or False
Hello
1

式を交換すると、Python インタープリターが評価する最初のオペランドであるため、作成した関数が毎回実行されます。

上記のコード例のいずれかを考慮すると、or 演算子は True ブール値を返します。

ただし、or 演算子を使用して False ブール値を取得した場合は、作成された関数を少し調整できます。

def exp():
    print("Hello")
    return False
>>> exp()
Hello
False

上記の変更後、exp() 関数を呼び出すたびに、Hello をコンソールに出力した後、False ブール値のみが返されます。

>>> exp() or True
Hello
True
>>> exp() or False
Hello
False

この関数は呼び出しごとに False ブール値のみを返すため、Python インタープリターは後者の式またはオペランドを評価する必要があります。

著者: Preet Sanghavi
Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub