Python运算符:数学优先级比较运算符与相等运算符

3
print 1>0 == (-1)<0           # => False
print (1>0) == ((-1)<0)       # => True

第一行输出False。第二行输出True。

问题在于,如果按照顺序比较运算符高于相等运算符,那么可能会出现这种情况。

难道两行不应该都输出True吗?(或者至少应该是相同的结果..)

https://www.codecademy.com/en/forum_questions/512cd091ffeb9e603b005713


2
我认为这个特定的情况与“比较链接”有关,这是Python的一个特性 - 1>0 == (-1)<0 等同于 1 > (0 == (-1)) < 0 - user2864740
请清楚详细地解释为什么您期望的结果与您当前得到的结果不同。 - jwpfox
1
这个问题对我来说似乎很清楚。请确保使用适当的关闭投票/理由。(我不会怀疑是重复的。) - user2864740
1个回答

6
在Python中,等号和大于小于运算符具有相同的优先级。但是,如果表达式中有多个比较运算符,则会出现奇怪的情况。Python使用and将它们链接在一起(重复中间子表达式),而不是使用其优先级规则来比较以前计算的结果。表达式1>0== -1<0等价于(1>0) and (0==-1) and (-1<0)(除了每个重复子表达式,例如-1只被评估一次,如果它是一个带有副作用的函数调用而不是整数文字,则可能会有所影响)。由于中间子表达式为False,因此整个表达式为False。在第二个版本中,括号防止比较链接发生,因此它只是独立地评估不等式,然后比较True == True,这是True

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接