为什么是' True is False == False ', Python中的False



为什么当使用括号时,这些语句会像预期的那样工作:

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

但是当没有括号时它返回False ?

>>> True is False == False
False

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

请注意,比较、成员关系测试和标识测试都具有相同的优先级,并且具有从左到右的链接特性,如比较部分所述。

实际上你有一个像这样的链式语句:

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

您可以假设中心对象将在2个操作和其他对象之间共享(在这种情况下为False)。

请注意,对于所有比较,包括操作数后面的成员测试和标识测试操作,也是如此:

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

的例子:

>>> 1 in [1,2] == True
False

在比较操作符方面,Python有一个独特的传递属性。简单一点会更容易看清楚。

if 1 < x < 2:
    # Do something

就像它看起来的那样。它检查1

这是一个二重不等式,展开为(True is False) and (False == False)。例如,请参阅在Python中编写双不等式时的操作符优先级是什么(在代码中显式地显示,以及如何在数组中覆盖它?)

Python解释多个(in)等式的方式与您在Math中期望的方式相同:

数学中a = b = c是指所有a = b, b = ca = c

所以True is False == False代表True == FalseFalse == FalseTrue == False,也就是False

对于布尔常量,is等价于==

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

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

下面提到的操作符具有相同的优先级。

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

因此,当Python尝试计算表达式True is False == False时,它遇到具有相同优先级的操作符is==,因此它执行从左到右的链接。

因此,表达式True is False == False实际上被求值为:

(True is False) and (False == False)

给出False作为输出

最新更新