1

当我评估以下操作时

0 if True else 1 + 1 if False else 1

它评估为 0 但是当我用括号写时

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

它正确评估为 1 ,在第一种情况下发生了什么。

4

3 回答 3

11
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))
于 2012-08-12T12:50:42.017 回答
3

asternary 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
于 2012-08-12T12:57:21.797 回答
-1

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

于 2012-08-12T14:27:55.287 回答