【问题标题】:Comparison operators' priority in Python vs C/C++Python 与 C/C++ 中比较运算符的优先级
【发布时间】:2012-01-10 11:54:43
【问题描述】:

在 C/C++ 中,< > 等比较运算符的优先级高于 ==。此代码将评估为 true1

if(3<4 == 2<3) {  //3<4 == 2<3 will evaluate to true
    ...
}

但在 Python 中,这似乎是错误的:

3<4 == 2<3  #this will evaluate to False in Python.

在 Python 中,每个比较运算符是否具有相同的优先级?

【问题讨论】:

    标签: python comparison-operators


    【解决方案1】:

    在 Python 中,比较运算符不仅具有相同的优先级,而且还受到特殊处理(它们是链接而不是分组)。来自documentation

    形式上,如果a, b, c, ..., y, z 是表达式而op1, op2, ..., opN 是比较运算符,那么a op1 b op2 c ... y opN z 等价于a op1 b and b op2 c and ... and y opN z,除了每个表达式最多计算一次。

    在你的情况下,表达式

    3<4 == 2<3
    

    等价于

    3 < 4 and 4 == 2 and 2 < 3
    

    由于第二个子句,它是False

    【讨论】:

      【解决方案2】:

      简短回答:是的,所有比较都有相同的优先级

      长答案:您可能想查看文档:Precedence on Python

      【讨论】:

      • @Alcott:一个经验法则是,如果您想使用空格来表示优先级,就像您在上面的 C++ 代码中所做的那样,那么您应该放入括号。否则你的间距可能会“撒谎”。
      • @Alcott:就像在任何其他语言中一样,您希望将括号放在任何您知道优先规则将对您不利的地方,但是当您觉得更容易理解逻辑时也是如此。我的意思是,a &lt; b and b &gt; c 将按预期工作(and 的优先级低于比较器,这意味着 a &lt; bb &gt; c 将首先被评估),但将其明确化并帮助任何人阅读并没有错代码(例如你!),特别是当代码比这更复杂时。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      相关资源
      最近更新 更多