我在上个月开始学习python。我最近遇到了一个代码示例,其中代码中的计数器根据条件递增。作者的方式是:
x = 0
x += [-1, 1][a == b]
从测试开始,这与使用if a==b: increment, else: decrement
时的效果相同。
我在python文档中看到的其他任何地方都找不到这种语法。它似乎非常强大,允许各种条件分配和帮助简洁。
有没有理由我不应该使用这种结构呢?结构在做什么?
答案 0 :(得分:4)
Explicit is better than implicit.
Simple is better than complex.
Readability counts.
坚持更明确,可读和广泛使用的版本:
x += 1 if a == b else -1
答案 1 :(得分:3)
[a == b]
评估为有效False
或True
的{{1}}或0
,然后将其用作{1
的索引1}} ...
因此当[-1, 1]
得到a==b
([-1, 1][1]
)或他们不相等的时候,你会得到1
([-1, 1][0]
),然后将相应的值添加到-1
。
答案 2 :(得分:2)
有些人会称之为黑客攻击,而且很难阅读(正如这个问题所证明的那样),但这相当于:
x = 0
if(a == b):
x += 1
else:
x -= 1
因为a == b
的(布尔)结果的整数版本是0或1。