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)
仅True
当a
和b
都为时才可以None
。
这里的文档,请参阅有关链接的内容。
有时非常有用,但在您最不期望的时候也会弹出!