Python “的影响”;及;论赋值与加法

Python “的影响”;及;论赋值与加法,python,Python,一行代码把我绊倒了: >>> i = 1 >>> j = 1 >>> i += j > 0 and i >>> print(i) 2 是什么机制或系统使这项工作?这似乎是i=i+i如果j>0或者i的语法糖分,但这需要解开很多东西。我错了吗?我不知道还有其他系统在起作用吗 谢谢 编辑: 为清楚起见: >>> i = 3 >>> j = 2 >>> i += j &

一行代码把我绊倒了:

>>> i = 1
>>> j = 1
>>> i += j > 0 and i
>>> print(i)
 2
是什么机制或系统使这项工作?这似乎是
i=i+i如果j>0或者i
的语法糖分,但这需要解开很多东西。我错了吗?我不知道还有其他系统在起作用吗

谢谢

编辑:

为清楚起见:

>>> i = 3
>>> j = 2
>>> i += j > 1 and i
>>> i
6
让我们把它分解一下:

In [1]: i = 1

In [2]: j = 1
现在,让我们看看表达式
i+=j>0和i

In [3]: j > 0
Out[3]: True
In [5]: i += i

In [6]: i
Out[6]: 2
由于
j
,即
1
大于
0
,因此计算结果为
True

In [4]: j > 0 and i
Out[4]: 1
因为
j>0
True
,所以布尔表达式的值是右侧的值,即
1

因此,
i+=j>0和i
简化为
i+=i
i=i+i

In [3]: j > 0
Out[3]: True
In [5]: i += i

In [6]: i
Out[6]: 2
我们也考虑一下你的第二个例子:

>>> i = 3
>>> j = 2
>>> i += j > 1 and i
>>> i
6
对于第三行,我们有以下变换:

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

在Python中,
不返回布尔值,而是返回提供给它们的计算结果为正确布尔值的选项之一

例如,
将返回遇到的第一个
False
值,或最后一个
True
值:

>>> 1 and 3
3

>>> 1 and 0
0
类似地,
将返回遇到的第一个真值,否则将返回第一个假值:

>>> 2 or 3
2

>>> 0 or 2
2

>>> False or 0
0

基本上,您应该记住,
不一定返回
/
,而是返回呈现给他们的计算结果为

如果使用“1”以外的值,我可能更容易看到发生了什么(因为一个合理的程序员可能会假设布尔值true将被转换为1(无论python是否这样做)),请注意,
i+=True
将i增加1。为了理解为什么这样做,请看下面两条语句的计算方式:
j>0和1##等于1
j>0和0##等于0
。我添加了一个不同的非布尔示例。@NoahBogart示例仍然是布尔的。您将i增加了True。@JoshuaT艾勒,
i=3;i+True
是4,不是6。这很有道理。非常感谢!