为什么在Python中以这种方式进行评估:
>>> False is False is False
True
但是当使用括号尝试时表现如预期:
>>> (False is False) is False
False
答案 0 :(得分:65)
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
进行比较。
答案 1 :(得分:26)
引用Python official documentation,
正式地,如果
a
,b
,c
,...,y
,z
是表达式,op1
,{{ 1}},...,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
。
答案 2 :(得分:14)
你的表达
False is False is False
被视为
(False is False) and (False is False)
所以你得到了
True and True
并评估为True
。
你也可以和其他运营商一起使用这种链接。
1 < x < 10
答案 3 :(得分:5)
我认为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
所以,你得到了结果。
答案 4 :(得分:0)
>>> False is False is False
True
在这种情况下,评估每个False
对。评估前两个False,如果它是True
,则评估第二个和第三个False
并返回结果。
在这种情况下,False is False is False
相当于2个命令and
的结果False is False