关于用 python 逻辑运算符短路的问题

Question about short circuiting with python logical operators

根据短路规则,任何时候我们有一个 True or ... 语句它 return 为真,不管语句的其余部分如何。例如,即使语句的其余部分抛出错误,它也会 return True。同样,False and ...语句总是returns False。我也在网上找了this explanation总结一下

所以,当我尝试 运行 时:

a = False or (5>"hello")
print(a)  

我有一个 TypeError,因为 strint 之间不支持“>”。

b = True or (5>"hello")
print(b)

然而,这个打印 True 并且它证明了短路规则。我通过在这里申请 False and ... 做了同样的事情:

c = False and (5>"hello")
print(c)

并且这一个按预期打印 False

到目前为止,我们已经展示了短路的概念。但问题是:

d = False and False or True
print(d)

e = True or False and False
print(e)

如果您 运行 上面的代码,您会看到 de 都是 True。虽然我们在d开头有一个False and ...语句,但似乎运行整个语句没有短路。所以:假与假 -> 假,假或真 -> 真。 这里我想到了"Hm, ok. Maybe it is because I had 3 booleans"。但是当它归结为 e 时,程序似乎短路了,因为如果没有,结果一定是:True or False -> True,True and False -> False。

能否请您解释一下为什么程序被e短路而不被d短路?

and的优先级高于or,所以你的代码等同于:

d = (False and False) or True
print(d)

e = True or (False and False)
print(e)

为了让它像您期望的那样工作,您必须将 d 更改为:

d = False and (False or True)