if cpu_expensive_condition() or simple_condition():
do_something()
上面python代码中OR语句中的两个条件将首先评估?,并且两者都将被评估是强制性的吗?
if cpu_expensive_condition() or simple_condition():
do_something()
上面python代码中OR语句中的两个条件将首先评估?,并且两者都将被评估是强制性的吗?
该表达式
x or y
首先计算 x;如果 x 为真,则返回其值;否则,评估 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 时才计算第二个参数。
所以cpu_expensive_condition()
总会被评价。simple_condition()
只会在cpu_expensive_condition()
返回时进行评估False
(或评估为 的东西False
,例如0
or''
或None
)。
另请参阅:Python 是否支持短路?
Python 进行短路评估。当然,第一个语句将首先被评估。False
只有当第一个是或假的时,才会评估第二个。