为什么(1 == 2!= 3)在Python中评估为False?

时间:2017-12-20 06:45:57

标签: python operator-precedence

为什么(1 == 2 != 3)会在Python中评估为False,而((1 == 2) != 3)(1 == (2 != 3))评估为True

这里使用什么运算符优先级?

2 个答案:

答案 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