无法理解 Python 如何解释此 'or' 运算符
Can't understand how Python interprets this 'or' operator
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
运算符计算它的 return 值吗?
这是由于 "short-circuit" 评估。因为 True or anything
必须 return True
,解释器立即 returns True
在评估其余部分之前,这不能改变结果。
and
和or
是Python中的短路运算符,在docs中可以看出。如果左侧 (LHS) 为真,or
运算符将立即 return,因为右侧 (RHS) 不会影响结果 (True or False == True or True == True
)。如果 LHS 是 False
,and
运算符将立即 return,因为结果必然是 False
短路评估的更多信息
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
运算符计算它的 return 值吗?
这是由于 "short-circuit" 评估。因为 True or anything
必须 return True
,解释器立即 returns True
在评估其余部分之前,这不能改变结果。
and
和or
是Python中的短路运算符,在docs中可以看出。如果左侧 (LHS) 为真,or
运算符将立即 return,因为右侧 (RHS) 不会影响结果 (True or False == True or True == True
)。如果 LHS 是 False
,and
运算符将立即 return,因为结果必然是 False