为什么在Python中'True is False==False',False?

为什么在Python中'True is False==False',False?,python,python-3.x,Python,Python 3.x,为什么在使用括号时这些语句会按预期工作: >>> (True is False) == False True >>> True is (False == False) True 但是如果没有括号,它会返回False >>> True is False == False False 这是一个双重不等式,扩展为(True为False)和(False==False)。例如,请参见在比较运算符方面,Python有一个独特的可传递属性。在更简单的

为什么在使用括号时这些语句会按预期工作:

>>> (True is False) == False
True

>>> True is (False == False)
True
但是如果没有括号,它会返回
False

>>> True is False == False
False

这是一个双重不等式,扩展为
(True为False)和(False==False)
。例如,请参见

在比较运算符方面,Python有一个独特的可传递属性。在更简单的情况下更容易看到

if 1 < x < 2:
    # Do something
它正在检查True是否为FalseFalse==False,其中只有一个为True。

基于python关于运算符优先级:

请注意,比较、成员资格测试和身份测试都具有相同的优先级,并具有“比较”部分中描述的从左到右链接功能

实际上,你有一个链式语句,如下所示:

>>> (True is False) and (False==False)
False
您可以假设中心对象将在2个操作和其他对象之间共享(本例中为False)

请注意,它也适用于所有比较,包括以下操作数的成员资格测试和标识测试操作:

in, not in, is, is not, <, <=, >, >=, !=, ==

如果Python在计算表达式时遇到相同优先级的运算符,则会执行链接。

比较,包括所有具有相同优先级的测试 从左到右的链

下面提到的运算符具有相同的优先级

in, not in, is, is not, <, <=, >, >=, <>, !=, ==

False
作为输出。

Python以您在数学中期望的方式解释多个(in)等式:

在数学中,
a=b=c
表示所有
a=b
b=c
a=c

所以
True is False==False
意味着
True==False
False==False
True==False
,即
False


对于布尔常量,
is
相当于
=

显然,您进入了Python语法中为数不多的黑暗角落之一(即结果非常令人惊讶的地方)。因此,简而言之,这是一个bug?这看起来很反直觉。另一方面,你可以编写
0<0.25<0.5
,这会在其他语言中产生一个奇怪的结果。不,这不是一个bug-这是语言的预期操作,让你大吃一惊啊!我使用了
1
,只是认为这是一个特例,我没有意识到它也适用于其他操作符。实际上,
a是b==c
只意味着
(a是b)和(b==c)
a
c
是不可比较的。考虑<代码> 0=0=0 < /代码>。@莫里斯表示A是B,B是C,表示A是C。我只是给出了一个简单的方法来确定结果,而不是它是如何处理的
>>> 1 in [1,2] == True
False
in, not in, is, is not, <, <=, >, >=, <>, !=, ==
(True is False) and (False == False)