if cpu_expensive_condition() or simple_condition():
do_something()
在上面的python代码中的OR语句中的两个条件中,将首先进行求值? ,是否必须对两者进行评估?
答案 0 :(得分:14)
表达式
x or y
首先评估x;如果x为真,则返回其值;否则,评估y并返回结果值。
答案 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 }})。
答案 3 :(得分:1)
Python进行短路评估。当然,将首先评估第一个声明。只有当第一个是False
或false-ish。