Python 解释以下语法的方式对我来说毫无意义(因此我浪费了两个小时调试代码!
假设您有以下代码:
def returns_true():
print('i've been called!')
return True
for val in [True, False]:
print('val =', val)
print(val or returns_true())
生成以下输出
val = True
True
val = False
i've been called!
True
有人可以解释为什么returns_true()
只有在val
False
时才被召唤吗?Python 不应该调用该函数以使用 or
运算符评估它的返回值吗?
由于"短路"评估。因为True or anything
必须返回True
,解释器在评估其余部分之前立即返回True
,这不能改变结果。
and
和or
是 Python 中的短路运算符,如文档中所示。如果左侧 (LHS( 为真实,则or
运算符将立即返回,因为右侧 (RHS( 不会影响结果 (True or False == True or True == True
(。如果 LHS False
,and
算子将立即返回,因为结果必然是False
有关维基百科短路评估的更多信息 短路评估