"和"对赋值和添加的影响

Noa*_*art 4 python

一行代码绊倒了我:

>>> i = 1
>>> j = 1
>>> i += j > 0 and i
>>> print(i)
 2
Run Code Online (Sandbox Code Playgroud)

使这项工作的基础机制或系统是什么?这似乎是它的语法糖i = i + i if j > 0 else i,但解压缩了很多.我错了吗?还有其他系统在玩我不知道吗?

谢谢!

编辑:

为清楚起见:

>>> i = 3
>>> j = 2
>>> i += j > 1 and i
>>> i
6
Run Code Online (Sandbox Code Playgroud)

Rob*_*obᵩ 6

让我们分解一下:

In [1]: i = 1

In [2]: j = 1
Run Code Online (Sandbox Code Playgroud)

现在,让我们看看表达式i += j > 0 and i:

In [3]: j > 0
Out[3]: True
Run Code Online (Sandbox Code Playgroud)

因为j,这1大于0,所以评估为True.

In [4]: j > 0 and i
Out[4]: 1
Run Code Online (Sandbox Code Playgroud)

因为j > 0True,布尔表达式的值是右侧的值,即1.

因此,i += j > 0 and i简化为i += ii = i + i:

In [5]: i += i

In [6]: i
Out[6]: 2
Run Code Online (Sandbox Code Playgroud)

我们还要考虑你的第二个例子:

>>> i = 3
>>> j = 2
>>> i += j > 1 and i
>>> i
6
Run Code Online (Sandbox Code Playgroud)

对于第三行,我们有这些变换:

i += j > 1 and i
i = i + (j > 1 and i)
i = 3 + (2 > 1 and 3)
i = 3 + (True and 3)
i = 3 + 3
i = 6
Run Code Online (Sandbox Code Playgroud)