0是0 == 0(#evaluates为True?)

Agu*_*guy 21 python python-3.x

这令我感到困惑.即使不知道优先顺序,也可以检查收集表达式的两种可能方法是False:

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

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

怎么会?

Mar*_*ers 19

您正在使用比较运算符链接.表达式被解释为:

(0 is 0) and (0 == 0)
Run Code Online (Sandbox Code Playgroud)

比较文档:

比较可以任意链接,例如,x < y <= z等同于x < y and y <= z,除了y仅评估一次(但在两种情况下z都没有被评估,当x < y发现是假的时).

0 is 0是真的,因为Python实习小整数,一个实现细节,所以你得到了(True) and (True)生产True.


sep*_*p2k 5

在Python中链接比较运算符时,运算符实际上并不应用于其他运算符的结果,而是单独应用于操作数.这就是x ? y ?? z(其中?,并??都应该站在对一些比较操作)既不等同于(x ? y) ?? z也不是x ? (y ?? z),而是x ? y and y ?? z.

这对于>和co.来说特别有用,它允许你编写类似的东西min < x < max并让它做你想做的事情,而不是将布尔值与数字进行比较(这在大多数其他语言中会发生).