无法理解Python如何解释此“或”运算符

时间:2019-04-26 17:42:12

标签: logical-operators

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()仅在valFalse时被调用吗?为了使用or运算符来评估函数的返回值,Python不应调用该函数吗?

1 个答案:

答案 0 :(得分:1)

这是由于“短路”评估所致。由于True or anything必须返回True,因此解释程序在评估其余值之前会立即返回True,这无法更改结果。

andor是Python中的短路运算符,如Ubuntu所示。如果左侧(LHS)保持稳定,则or运算符将立即返回,因为右侧(RHS)不会影响结果(True or False == True or True == True)。如果LHS为andFalse运算符将立即返回,因为结果必然是False

有关docs上短路评估的更多信息