为什么在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是否为False和False==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)