【问题标题】:Python Operators: Math Precedence Comparison operators vs equality operatorsPython 运算符:数学优先级比较运算符与相等运算符
【发布时间】:2018-01-02 02:29:45
【问题描述】:
print 1>0 == (-1)<0           # => False
print (1>0) == ((-1)<0)       # => True

第一行打印 False。 第二行打印 True

问题是如果按照顺序比较运算符高于相等运算符。

不应该两行都打印 True 吗?(或者至少是同一件事..)

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

【问题讨论】:

  • 我相信这个特殊情况与"comparison chaining"有关,这是一个Python特性——1&gt;0 == (-1)&lt;0相当于1 &gt; (0 == (-1)) &lt; 0
  • 清楚、详细地解释为什么你期望得到的结果与你得到的结果不同。
  • 这个问题对我来说似乎很清楚。请确保使用适当的近距离投票/推理..(我不会怀疑重复。)

标签: python python-2.7 operator-precedence


【解决方案1】:

相等和大于和小于运算符在 Python 中具有相同的优先级。但是您会看到一些奇怪的东西,因为如何评估连续具有多个比较运算符的表达式。 Python chains them togetherand(重复中间子表达式)不是使用其优先规则比较先前计算的结果。

表达式1 &gt; 0 == -1 &lt; 0 等价于(1 &gt; 0) and (0 == -1) and (-1 &lt; 0)(除了每个重复的子表达式,如-1 只被评估一次,如果它是一个具有副作用的函数调用而不是整数文字,这可能很重要) .由于中间的子表达式是False,所以整个就是False

在第二个版本中,括号阻止了比较链接的发生,因此它只是独立评估不等式,然后比较True == True,即True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2021-09-02
    相关资源
    最近更新 更多