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

问题描述 投票:0回答:1

根据短路规则,只要我们有一个True or ...语句,无论其余语句如何,它都会返回True。例如,即使语句的其余部分抛出错误,它也会返回True。同样,False and ...语句始终返回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。尽管我们在False and ...的开头有一个d语句,但它似乎可以在不短路的情况下运行整个语句。所以:False and False-> False,False or True-> True。在这里,我以为“嗯,好的。也许是因为我有3个布尔值”。但是当涉及到e时,程序似乎出现了短路,因为如果没有短路,结果肯定是:True或False-> True,True和False-> False。

您能否解释为什么程序通过e而不是d短路?

python logical-operators boolean-logic short-circuiting
1个回答
1
投票

[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)
© www.soinside.com 2019 - 2024. All rights reserved.