【发布时间】: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 ,即第一种情况下发生的情况。
【问题讨论】:
当我评估以下操作时
0 if True else 1 + 1 if False else 1
然而,当我用括号写时,它的计算结果为 0
( 0 if True else 1 ) + ( 0 if False else 1 )
它正确评估为 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))
【讨论】:
因为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
【讨论】:
三元运算符看起来像“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。
【讨论】:
value if condition else alternative is 三元运算符,您可以将其用作子表达式。