为什么(1 == 2 != 3)
会在Python中评估为False
,而((1 == 2) != 3)
和(1 == (2 != 3))
评估为True
?
这里使用什么运算符优先级?
答案 0 :(得分:17)
这是由运营商chaining phenomenon
引起的。 Pydoc将其解释为:
比较可以任意链接,例如 x< y< = z 是等价的 到 x< y和y< = z ,除了y仅计算一次(但在两者中) 当x
如果您查看==
和!=
运算符的precedence,您会发现它们具有相同的优先级,因此适用于链接现象。
所以基本上会发生什么:
>>> 1==2
=> False
>>> 2!=3
=> True
>>> (1==2) and (2!=3)
# False and True
=> False
答案 1 :(得分:3)
像A op B op C
这样的链式表达式,其中op
是比较运算符,与C评估为(https://docs.python.org/2.3/ref/comparisons.html)形成鲜明对比:
A op B and B op C
因此,您的示例评估为
1 == 2 and 2 != 3
结果为False
。