在 OR 条件下,哪一方在 python 中首先评估


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

在上面的 python 代码中,OR 语句中的两个条件将首先被评估 ? ,并且两者都必须被评估吗?

表达式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,则它仅计算第二个参数。

因此,cpu_expensive_condition()将始终进行评估。 只有当cpu_expensive_condition()返回False(或计算结果为 False 的内容,例如 0''None 时,才会评估simple_condition()(。

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

Python 会进行短路评估。当然,第一个语句将首先被评估。仅当第一个False或错误时,才会评估第二个。

最新更新