if cpu_expensive_condition() or simple_condition():
do_something()
最初に評価される上記のPythonコードのORステートメントの2つの条件のうち?、そして両方を評価することは必須ですか?
if cpu_expensive_condition() or simple_condition():
do_something()
最初に評価される上記のPythonコードのORステートメントの2つの条件のうち?、そして両方を評価することは必須ですか?
式
x or y
は最初にxを評価します。xがtrueの場合、その値が返されます。それ以外の場合は、yが評価され、結果の値が返されます。
Python言語リファレンスから引用
Pythonは左から右に評価し、両側を評価する必要はありません。次の例を考えてみましょう。
def left(x):
print 'left'
return x
def right(x):
print 'right'
return x
if left(False) or right(False):
print 'Done'
if left(True) or right(True):
print 'Done'
これにより、次の出力が生成されます。
left
right #This is where the first if statement ends.
left
Done #Only the left side was evaluated
ブール演算によると—そして、または、 Pythonのドキュメントにはありません:
これは短絡演算子であるため、最初の引数がFalseの場合にのみ2番目の引数を評価します。
したがって、常に評価されますcpu_expensive_condition()
。が戻ったときにのみ評価されます(または、またはなどのと評価されるもの)。simple_condition()
cpu_expensive_condition()
False
False
0
''
None
Pythonは短絡評価を行います。もちろん、最初のステートメントが最初に評価されます。False
2番目は、最初が偽であるか偽である場合にのみ評価されます。