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 インタープリターは後者の式またはオペランドを評価する必要があります。