繁体   English   中英

为什么“False is False is False”评估为“True”?

[英]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 bc

引用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM