根据短路规则,只要我们有一个True or ...
语句,无论其余语句如何,它都会返回True。例如,即使语句的其余部分抛出错误,它也会返回True
。同样,False and ...
语句始终返回False
。我也在线找到了this explanation来总结一下。
所以,当我尝试运行此代码时:
a = False or (5>"hello")
print(a)
我有一个TypeError
,因为在str
和int
之间不支持'>'。
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)
如果运行上面的代码,您会看到d
和e
均为True
。尽管我们在False and ...
的开头有一个d
语句,但它似乎可以在不短路的情况下运行整个语句。所以:False and False-> False,False or True-> True。在这里,我以为“嗯,好的。也许是因为我有3个布尔值”。但是当涉及到e时,程序似乎出现了短路,因为如果没有短路,结果肯定是:True或False-> True,True和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)