在学习运算符计算的时候我们一般是先看优先级再看它的结合性来计算,但今天学习到了一个很有意思的东西,就写下来存个档。
下面这个题目
>>> a = 3 >>> b = 0 >>> print(a < b != b <= 2)
在进行对上面这段代码进行运算的时候,因为<、!=、<=都是同一优先级且为左结合性(参考),因此我们一步步算下来很容易得出
>>> a < b False >>> False != b False >>> False <= 2 True
我们来运行一下上面的print语句看看结果
>>> print(a < b != b <= 2) False
是的,你没看错,结果是False,说实话,我想了很久都没想明白,为什么结果会是这玩意儿。
又经过了一系列的尝试,我发现问题出现在这种地方,不管是我优先计算左边,还是优先计算右边,发现都不合理。
>>> 2 != 2 <= 2 False >>> (2 != 2) <= 2 True >>> 2 != (2 <= 2) True
终于,我在这里找到了答案。
在出现非关联运算符的时候计算方式和其它运算符是不同的,这里也给出了一段解释
For example, the expression 5 < 7 < 9 does not mean (5 < 7) < 9 or 5 < (7 < 9). Also, the statement 5 < 7 < 9 is same as 5 < 7 and 7 < 9, and gets evaluated from left-to-right.
这就很好理解了,我们计算的
>>> 2 != 2 <= 2 其实是 >>> 2 != 2 and 2 <= 2
这样这个问题也就解决了
>>> a < b != b <= 2 也就等价于 >>> a < b and b != b <= 2 这样子也就是 >>> a < b and b != b and b <= 2 False



