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

上面python代码中OR语句中的两个条件将首先评估?,并且两者都将被评估是强制性的吗?

4

4 回答 4

21

该表达式x or y首先计算 x;如果 x 为真,则返回其值;否则,评估 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 时才计算第二个参数。

所以cpu_expensive_condition()总会评价。simple_condition()只会在cpu_expensive_condition()返回时进行评估False(或评估为 的东西False,例如0or''None)。

另请参阅:Python 是否支持短路?

于 2012-07-23T12:47:09.860 回答
1

Python 进行短路评估。当然,第一个语句将首先被评估。False只有当第一个是或假的时,才会评估第二个。

于 2012-07-23T12:45:12.387 回答