【问题标题】:Different evaluation results of python if else expressionpython if else表达式的不同求值结果
【发布时间】:2021-01-06 05:18:15
【问题描述】:

以下两个表达式使用 if...else...

我能理解 c2 结果。但我想知道为什么 c1 返回不同的结果。

a = 10
c1 = 10 + a if a > 20 else -a
c2 = 10 + (a if a > 20 else -a)

print(c1, c2)

输出:

-10    0

【问题讨论】:

  • c1 被评估为c1 = (10+a) if a>20 else -a 因此输出为-10
  • 当您不清楚复杂的表达式值时,只需检查运算符优先级,或简单地添加所有括号,甚至是多余的括号,以确保不会出现混淆。

标签: python if-statement expression evaluation


【解决方案1】:

这是一个operator precedence 问题,+ 的优先级高于if,所以

c1 = 10 + a if a > 20 else -a

被评估为

c1 = (10 + a) if a > 20 else -a
   = 20 if 10 > 20 else -10
   = -10       # because 10 <= 20

你的第二个陈述被评估为书面的地方

c2 = 10 + (a if a > 20 else -a)
   = 10 + (10 if 10 > 20 else -10)
   = 10 + -10       # because 10 <= 20
   = 0

【讨论】:

  • 感谢您的解释。我现在明白了。
  • @JilongYin 不用担心 - 我很高兴能帮上忙。
【解决方案2】:

c1 等价于(10 + a) if a &gt; 20 else -a

【讨论】:

    猜你喜欢
    • 2014-04-08
    • 2011-02-01
    • 2012-08-20
    • 2019-12-10
    • 1970-01-01
    • 2012-10-26
    • 2019-09-04
    • 2013-06-26
    • 1970-01-01
    相关资源
    最近更新 更多