在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。在这种情况下,似乎is优先于==。
再举一个例子,这个表达并不意味着要做什么,但请你忍受我。如果我说
None is None == None

它返回真。但以下两个都返回错误。
None is (None == None)
(None is None) == None

很明显,python并没有用严格的优先级来评估这些问题,但是我很困惑到底发生了什么。它是如何用两个不同的运算符来计算这个表达式的,但与两个顺序都不同?

最佳答案

您在这里看到的是操作符链接,根本不涉及优先级!
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
documentationhere,请参阅有关链接的位。
有时很有用,但当你最意想不到的时候它也会出现!

关于python - Python是,==运算符优先级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52045377/

10-16 22:52