python - 三元运算符行为

标签 python ternary-operator

我最近开始使用三元运算符,但我遇到了一个情况,我需要在同一行中使用多个三元运算符,但它们似乎并没有像我预期的那样工作。

有人可以解释为什么这些行给出不同的结果。

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/

相关文章:

python - Flask 管理员在更改用户模型时覆盖密码

python - 将 Pandas Dataframe 转换为嵌套字典

javascript - jquery复选框检查属性和三元运算符

c# - 为什么 C# 三元运算符需要强制转换,而等效的 if() 语句不需要?

vb.net - 为什么 VB.NET 中的三元运算符接受 Nullable bool 值?

cmake - CMake 生成器表达式中的三元运算符

javascript - 在 Javascript 中使用三元运算符

python - 面向对象编程Python : Where to instantiate Cassandra and elasticsearch cluster?

python - 如何修剪 pandas 列中的字符串和字符串列表

python - 将两个 DataFrames 元素与不同的 DataFrame 进行比较