簡體   English   中英

“和”對賦值和添加的影響

[英]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 ii = 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

因為j1 )大於0 ,所以計算結果為True

In [4]: j > 0 and i
Out[4]: 1

因為j > 0True ,所以布爾表達式的值是右側的值,即1

因此, i += j > 0 and i簡化為i += ii = 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 ,但返回呈現給它們的一個元素,其評估為TrueFalse

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM