print 1>0 == (-1)<0 # => False
print (1>0) == ((-1)<0) # => True
第一行打印False。第二行打印True
问题是如果根据顺序比较运算符高于相等运算符。
这两行不应该打印True吗? (或至少相同的事情..)
https://www.codecademy.com/en/forum_questions/512cd091ffeb9e603b005713
相等和大于和小于运算符在Python中具有相同的优先级。但是你会看到一些奇怪的东西,因为连续多个比较运算符的表达式是如何被评估的。而不是使用其优先级规则比较先前计算的结果,Python将它们与and
(重复中间子表达式)链接在一起。
表达式1 > 0 == -1 < 0
等价于(1 > 0) and (0 == -1) and (-1 < 0)
(除了每个重复的子表达式,如-1
只被评估一次,如果它是一个带副作用的函数调用而不是整数文字可能很重要)。由于中间的子表达式是False
,整个事情是False
。
在第二个版本中,括号阻止比较链接发生,因此它只是独立地评估不等式,然后比较True == True
,即True
。