【问题标题】:python ternary operator behaviourpython三元运算符行为
【发布时间】:2012-08-08 23:22:28
【问题描述】:

当我评估以下操作时

0 if True else 1 + 1 if False else 1

然而,当我用括号写时,它的计算结果为 0

( 0 if True else 1 ) + ( 0 if False else 1 )

它正确评估为 1 ,即第一种情况下发生的情况。

【问题讨论】:

    标签: python ternary-operator


    【解决方案1】:
    0 if True else 1 + 1 if False else 1
    

    其实是:

    (0) if (True) else ((1 + 1) if (False) else (1))
    

    这肯定与你想要的不同:

    ((0) if (True) else (1)) + ((1) if (False) else (1))
    

    【讨论】:

      【解决方案2】:

      因为ternary operator 是从left to right 读取的,+ 的优先级低于条件运算符。所以,这两个是等价的:

      >>> 0 if True else 1 + 1 if False else 1
      0
      >>> 0 if True else ( (1 + 1) if False else 1)
      0
      

      【讨论】:

        【解决方案3】:

        三元运算符看起来像“condition ? value if true : value if false”,但python似乎不支持,但我们可以使用if-else来替换。stype类似于“condition if (b_1 ) else b_2,所以你可以依赖它来匹配。如果b_1为True,则值为条件,如果b_2为True,则值为b_2。

        【讨论】:

        • a if b else c 是 python 实现的三元运算符。
        • Python 的value if condition else alternative is 三元运算符,您可以将其用作子表达式。
        • 我知道,但我认为你的解释更好,我只是想把结果背后的原因说清楚。
        猜你喜欢
        • 2018-09-18
        • 1970-01-01
        • 2017-03-05
        • 1970-01-01
        • 2011-05-05
        • 1970-01-01
        • 2013-10-29
        • 1970-01-01
        相关资源
        最近更新 更多