为什么`True是False == False`,在Python中是假的?

Sam*_*ley 29 python python-3.x

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

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

>>> True is (False == False)
True
Run Code Online (Sandbox Code Playgroud)

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

>>> True is False == False
False
Run Code Online (Sandbox Code Playgroud)

Kas*_*mvd 16

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

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

所以实际上你有一个链式声明如下:

>>> (True is False) and (False==False)
False
Run Code Online (Sandbox Code Playgroud)

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

请注意,对于所有比较,它也适用,包括跟随操作数的成员资格测试和身份测试操作:

in, not in, is, is not, <, <=, >, >=, !=, ==
Run Code Online (Sandbox Code Playgroud)

示例:

>>> 1 in [1,2] == True
False
Run Code Online (Sandbox Code Playgroud)


Sil*_*olo 10

Python在比较运算符方面具有独特的传递属性.在更简单的情况下更容易看到.

if 1 < x < 2:
    # Do something
Run Code Online (Sandbox Code Playgroud)

这样做看起来像.它会检查1 <x和x <2.在非括号内的代码中会发生同样的事情.

>>> True is False == False
False
Run Code Online (Sandbox Code Playgroud)

它检查True是否为假 False == False,其中只有一个为真.


Tho*_*hel 8

这是一个双重不等式,它被扩展为(True is False) and (False == False).请参阅例如在Python中编写双重不等式时的运算符优先级是什么(显式在代码中,如何为数组重写?)

  • 另一方面,你可以写出"0 <0.25 <0.5",这会给其他语言带来奇怪的结果. (2认同)