Python 隐式 if 语句与变量赋值 -- 这是如何工作的?
我在一个月前开始学习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]
这个表达式会返回 False
或 True
,也就是 0
或 1
。接着,这个结果会用来作为 [-1, 1]
这个列表的索引。
所以,当 a==b
成立时,你会得到 [-1, 1][1]
(这个结果是 1
);而当它们不相等时,你会得到 [-1, 1][0]
(这个结果是 -1
)。然后,得到的值会被加到 x
上。