一行代码绊倒了我:
>>> 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)
让我们分解一下:
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 > 0是True,布尔表达式的值是右侧的值,即1.
因此,i += j > 0 and i简化为i += i或i = 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)