一行代码绊倒了我:
>>> i = 1
>>> j = 1
>>> i += j > 0 and i
>>> print(i)
2
使这项工作的基础机制或系统是什么?它似乎是i = i + i if j > 0 else i
的语法糖,但打包时要解决很多问题。我错了吗?是否有其他系统在发挥我不知道?
谢谢!
修改
为清楚起见:
>>> i = 3
>>> j = 2
>>> i += j > 1 and i
>>> i
6
答案 0 :(得分:6)
让我们分解一下:
In [1]: i = 1
In [2]: j = 1
现在,让我们看一下表达式i += j > 0 and i
:
In [3]: j > 0
Out[3]: True
由于j
1
大于0
,因此评估为True
。
In [4]: j > 0 and i
Out[4]: 1
因为j > 0
是True
,所以布尔表达式的值是右侧的值,即1
。
因此,i += j > 0 and i
简化为i += i
或i = i + i
:
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
答案 1 :(得分:4)
在Python and
和or
中,不返回布尔值,而是返回提供给它们的一个选项,其中计算为正确的布尔值。
例如,and
将返回遇到的第一个False
值或最后一个True
值:
>>> 1 and 3
3
>>> 1 and 0
0
同样,or
将返回它遇到的第一个True值,否则返回第一个False值:
>>> 2 or 3
2
>>> 0 or 2
2
>>> False or 0
0
基本上,您应该记住,and
和or
不一定会返回True
/ False
,但会返回提交给它们的其中一个元素,评估为True
或False
。