为什么 `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 and b is c
。
所以第一个例子是 False is False and False is False
,它的计算结果是 True and True
,它的计算结果是 True
有括号会导致将一个评估的结果与下一个变量进行比较(正如您所说的那样),因此 (a is b) is c
将 a is b
的结果与 c
进行比较。
你的表情
False is False is False
被视为
(False is False) and (False is False)
所以你得到
True and True
计算结果为 True
。
您也可以将这种链接与其他运算符一起使用。
1 < x < 10
>>> False is False is False
True
在这种情况下,False
对中的每一个都会被评估。计算前两个 False,如果它是 True
,则计算第二个和第三个 False
,并计算结果 return。
在这种情况下,False is False is False
相当于 and
2 个命令的结果 False is False
我认为 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
所以,你得到了结果。
引用 Python official documentation,
Formally, if a
, b
, c
, ..., y
, z
are expressions and op1
, op2
, ..., opN
are comparison operators, then a op1 b op2 c ... y opN z
is equivalent to a op1 b and b op2 c and ... y opN z
, except that each expression is evaluated at most once.
因此,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
。
为什么在Python中是这样计算的:
>>> False is False is False
True
但是当尝试使用括号时,其表现符合预期:
>>> (False is False) is False
False
像 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
进行比较。
你的表情
False is False is False
被视为
(False is False) and (False is False)
所以你得到
True and True
计算结果为 True
。
您也可以将这种链接与其他运算符一起使用。
1 < x < 10
>>> False is False is False
True
在这种情况下,False
对中的每一个都会被评估。计算前两个 False,如果它是 True
,则计算第二个和第三个 False
,并计算结果 return。
在这种情况下,False is False is False
相当于 and
2 个命令的结果 False is False
我认为 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
所以,你得到了结果。
引用 Python official documentation,
Formally, if
a
,b
,c
, ...,y
,z
are expressions andop1
,op2
, ...,opN
are comparison operators, thena op1 b op2 c ... y opN z
is equivalent toa op1 b and b op2 c and ... y opN z
, except that each expression is evaluated at most once.
因此,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
。