关于用 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
,因为 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
。虽然我们在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)
根据短路规则,任何时候我们有一个 True or ...
语句它 return 为真,不管语句的其余部分如何。例如,即使语句的其余部分抛出错误,它也会 return True
。同样,False and ...
语句总是returns 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
。虽然我们在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)