[英]Why does `False is False is False` evaluate to `True`?
为什么在 Python 中它是这样评估的:
>>> False is False is False
True
但是当尝试使用括号时,它的行为符合预期:
>>> (False is False) is False
False
像a is b is c
这样a is b is c
链式运算符等价于a is b and b is c
。
所以第一个例子是False is False and False is False
,其计算结果为True and True
计算结果为True
有括号导致一个评估的结果与下一个变量进行比较(如你说你期望的),所以(a is b) is c
进行比较的结果, a is b
与c
。
引用Python 官方文档,
形式上,如果
a
,b
,c
, ...,y
,z
是表达式并且op1
,op2
, ...,opN
是比较运算符,那么a op1 b op2 c ... y opN z
等价于a op1 b and b op2 c and ... y opN z
,除了每个表达式最多计算一次。
所以, False is False is False
被评估为
(False is False) and (False is False)
第二个False is False
表达式使用原始表达式中的第二个False
,这有效地转换为
True and True
这就是为什么第一个表达式的计算结果为True
。
但在第二个表达式中,求值顺序如下。
(False is False) is False
这实际上是
True is False
这就是结果为False
。
你的表情
False is False is False
被视为
(False is False) and (False is False)
所以你得到
True and True
计算结果为True
。
您也可以将这种链接与其他运算符一起使用。
1 < x < 10
我认为False is False is False
意味着(False is False) and (False is False)
,但是(False is False) is False
意味着:
>>> (False is False) is False
False
>>> a_true = (False is False)
>>> a_true
True
>>> a_true is False
False
所以,你得到了结果。
>>> False is False is False
True
在这种情况下,评估每个False
对。 计算前两个 False ,如果它是True
,则计算第二个和第三个False
并返回结果。
在这种情况下, False is False is False
相当于and
2个的命令的结果的False is False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.