Python是==运算符优先级


问题内容

在Python3中,

a = b = 3
a is None == b is None

返回False,但是

(a is None) == (b is None)

返回True。因此,我想仅基于此示例,==优先于 is

然而,

a = b = None
a is None == b is None

返回True。和

(a is None) == (b is None)

返回True。但

a is (None == b) is None

返回False。在这种情况下,它会看起来好像 有优先级高于==。

再举一个例子,这个表达并不意味着要做什么,但是请忍受我。如果我说

None is None == None

它返回True。但是以下两个都返回False。

None is (None == None)
(None is None) == None

显然,Python并没有严格地评估它们,但是我对正在发生的事情感到困惑。它如何使用2个不同的运算符来评估此表达式,但是这两个顺序都不相同?


问题答案:

您在这里看到的是 运算符链接 ,根本没有优先级!

Python支持类似的表达式

1 < a < 3

测试数字是否在1到3之间;(1 < a) and (a < 3)a只评估一次外,等于。

不幸的是,这也意味着

None is None == None

实际上意味着

(None is None) and (None == None)

这当然是对的,而您开始的较长示例

a = b = 3
a is None == b is None

手段

(a is None) and (None == b) and (b is None)

Trueab都为时才可以None

这里的文档,请参阅有关链接的内容。

有时非常有用,但在您最不期望的时候也会弹出!