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

时间:2012-07-23 12:42:15

标签: python performance

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

在上面的python代码中的OR语句中的两个条件中,将首先进行求值? ,是否必须对两者进行评估?

4 个答案:

答案 0 :(得分:14)

  

表达式x or y首先评估x;如果x为真,则返回其值;否则,评估y并返回结果值。

引自Python Language Reference

答案 1 :(得分:4)

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

答案 2 :(得分:3)

根据Python文档中的Boolean Operations — and, or, not

  

这是一个短路运算符,所以如果第一个参数为False,它只会计算第二个参数。

因此cpu_expensive_condition()始终进行评估。仅当simple_condition()返回cpu_expensive_condition()(或评估为False的内容时,才会评估False,例如0''或{{1 }})。

另请参阅:Does Python support short-circuiting?

答案 3 :(得分:1)

Python进行短路评估。当然,将首先评估第一个声明。只有当第一个是False或false-ish。

时,才会评估第二个