我最近开始使用三元运算符,但我遇到了一个情况,我需要在同一行中使用多个三元运算符,但它们似乎并没有像我预期的那样工作。
有人可以解释为什么这些行给出不同的结果。
x = 1 if True else 2 + 3 if False else 4 # x = 1, I expected 5
x = (1 if True else 2) + (3 if False else 4) # x = 5
如果我添加括号,我会得到预期的结果,但我不明白括号会发生什么变化。
如果我旋转加法,没有括号,我会得到正确的值。
3 if False else 4 + 1 if True else 2 # x = 5
但是,如果第二个三元运算符为 False,我会得到错误的结果:
3 if False else 4 + 1 if False else 2 # x = 5 # x = 2 ???
是因为您不应该在同一行中使用多个三元运算符,还是其他原因?
最佳答案
原因是operator precedence .条件表达式具有最低但一的优先级,只有 lambda 表达式较低。因此,表达式
1 if True else 2 + 3 if False else 4
被评估为
1 if True else ((2 + 3) if False else 4)
返回 1。
关于python - 三元运算符行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49733668/