if cpu_expensive_condition() or simple_condition():
do_something()
在上面的 python 代码中,OR 语句中的两个条件将首先被评估 ? ,并且两者都必须被评估吗?
表达式
x or y
首先计算 x;如果 x 为 true,则返回其值;否则,计算 y 并返回结果值。
引自 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()
将始终进行评估。 只有当cpu_expensive_condition()
返回False
(或计算结果为 False
的内容,例如 0
或 ''
或 None
时,才会评估simple_condition()
(。
另请参阅:Python 是否支持短路?
Python 会进行短路评估。当然,第一个语句将首先被评估。仅当第一个False
或错误时,才会评估第二个。