为什么这两个三元表达式不相等?[复制]

Why aren't these two ternary expressions equal? [duplicate]

提问人:Vux 提问时间:11/9/2023 最后编辑:SelcukVux 更新时间:11/9/2023 访问量:82

问:

当我运行下面的代码时,我得到了两个不同的 i 值。 为什么?

唯一的区别是第一种用法,而第二种用法在我见过的所有其他用例中都是等效的。i = i + 1i += 1

i = 1
k = 2
i = i + 1 if i == k else k
print(i) # prints 2

i = 1
k = 2
i += 1 if i == k else k

print(i) # prints 3

python 条件运算符 就地

评论

2赞 Andras Deak -- Слава Україні 11/9/2023
i += 1不是一个表达式。你有。i += (1 if ...)
2赞 Frank Yellin 11/9/2023
您输入的内容被解析为,因此 i 递增 2。i += (1 if i == k else k)
1赞 Selcuk 11/9/2023
@AndrasDeak--СлаваУкраїні 重复项与此问题无关。本问题中的示例是有效的三元运算。它们只是给出不同的结果,而重复问题中的结果是语法错误。
2赞 Andras Deak -- Слава Україні 11/9/2023
@Selcuk它们不是 100% 重复的,但它们解释了 OP 的核心混淆:+= 不可能在条件表达式的第一个分支中。你的回答在这方面没有澄清任何内容。
1赞 Andras Deak -- Слава Україні 11/9/2023
@Selcuk我错了,对不起。OP的困惑甚至更简单。我认为你的答案会受益于用多余的括号拼出两个完整的陈述。

答:

2赞 Selcuk 11/9/2023 #1

根据 Python 的运算符优先级规则,在第一个示例中,三元表达式适用于 .所以以下i + 1

i = i + 1 if i == k else k

相当于

i = ((i + 1) if i == k else k)

鉴于以下

i += 1 if i == k else k

相当于

i += (1 if i == k else k)

评论

0赞 Andras Deak -- Слава Україні 11/9/2023
@AbdulAzizBarkat这就是 Selcuk 的答案最初关注的重点,但我建议添加上下文。我认为 OP 在一定程度上对看起来不同的作业感到困惑,所以我认为将全貌视为陈述有助于他们的理解。即使从技术上讲,左手边是一条红鲱鱼(但你已经必须知道答案才能看到这一点)。