9
if cpu_expensive_condition() or simple_condition():
        do_something()

最初に評価される上記のPythonコードのORステートメントの2つの条件のうち?、そして両方を評価することは必須ですか?

4

4 に答える 4

21

x or yは最初にxを評価します。xがtrueの場合、その値が返されます。それ以外の場合は、yが評価され、結果の値が返されます。

Python言語リファレンスから引用

于 2012-07-23T12:44:47.073 に答える
5

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
于 2012-07-23T12:52:49.893 に答える
3

ブール演算によると—そして、または、 Pythonのドキュメントにはありません:

これは短絡演算子であるため、最初の引数がFalseの場合にのみ2番目の引数を評価します。

したがって、常に評価されますcpu_expensive_condition()。が戻ったときにのみ評価されます(または、またはなどのと評価されるもの)。simple_condition()cpu_expensive_condition()FalseFalse0''None

参照:Pythonは短絡をサポートしていますか?

于 2012-07-23T12:47:09.860 に答える
1

Pythonは短絡評価を行います。もちろん、最初のステートメントが最初に評価されます。False2番目は、最初が偽であるか偽である場合にのみ評価されます。

于 2012-07-23T12:45:12.387 に答える