[英]Effect of “and” on assignment and addition
一行代碼絆倒了我:
>>> i = 1
>>> j = 1
>>> i += j > 0 and i
>>> print(i)
2
使這項工作的基礎機制或系統是什么? i = i + i if j > 0 else i
, i = i + i if j > 0 else i
似乎是i = i + i if j > 0 else i
的語法糖,但是解壓縮了很多。 我錯了嗎? 還有其他系統在玩我不知道嗎?
謝謝!
編輯:
為清楚起見:
>>> i = 3
>>> j = 2
>>> i += j > 1 and i
>>> i
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
在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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.