Python 隐式 if 语句与变量赋值 -- 这是如何工作的?

2 投票
3 回答
1716 浏览
提问于 2025-04-18 16:50

我在一个月前开始学习Python。最近我看到一个代码示例,其中有一个计数器根据条件进行递增。作者的写法是:

x = 0
x += [-1, 1][a == b]

经过测试,这种写法的效果和用if a==b: increment, else: decrement是一样的。我在Python的文档中找不到这种语法。它看起来很强大,可以进行多种条件赋值,而且写起来比较简洁。

请问我有没有理由不使用这种结构?这个结构到底是干什么的?

3 个回答

2

有人可能会称这是一种小技巧,而且读起来可能有点难懂(就像这个问题所显示的那样),但它其实和下面的代码是一样的:

x = 0
if(a == b):
    x += 1
else:
    x -= 1

因为a == b的结果是布尔值(真或假),转换成整数后就是0或1。

4

Python的哲学里提到:

Explicit is better than implicit.
Simple is better than complex.
Readability counts.

要坚持使用更清晰、易读且广泛使用的版本:

x += 1 if a == b else -1
3

[a == b] 这个表达式会返回 FalseTrue,也就是 01。接着,这个结果会用来作为 [-1, 1] 这个列表的索引。

所以,当 a==b 成立时,你会得到 [-1, 1][1](这个结果是 1);而当它们不相等时,你会得到 [-1, 1][0](这个结果是 -1)。然后,得到的值会被加到 x 上。

撰写回答