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

时间:2014-08-11 15:06:28

标签: python if-statement syntax conditional

我在上个月开始学习python。我最近遇到了一个代码示例,其中代码中的计数器根据条件递增。作者的方式是:

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

从测试开始,这与使用if a==b: increment, else: decrement时的效果相同。 我在python文档中看到的其他任何地方都找不到这种语法。它似乎非常强大,允许各种条件分配和帮助简洁。

有没有理由我不应该使用这种结构呢?结构在做什么?

3 个答案:

答案 0 :(得分:4)

The Zen of Python说:

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

坚持更明确,可读和广泛使用的版本:

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

答案 1 :(得分:3)

[a == b]评估为有效FalseTrue的{​​{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。

相关问题