[英]What does += mean in Python?
我在 Python 中看到這樣的代碼:
if cnt > 0 and len(aStr) > 1:
while cnt > 0:
aStr = aStr[1:]+aStr[0]
cnt += 1
+=
是什么意思?
a += b
本質上與a = a + b
,除了:
+
總是返回一個新分配的對象,但+=
應該(但不是必須)就地修改對象,如果它是可變的(例如list
或dict
,但int
和str
是不可變的)。
在a = a + b
, a
被評估兩次。
如果這是您第一次遇到+=
運算符,您可能想知道為什么它可以就地修改對象而不是構建新對象很重要。 下面是一個例子:
# two variables referring to the same list
>>> list1 = []
>>> list2 = list1
# += modifies the object pointed to by list1 and list2
>>> list1 += [0]
>>> list1, list2
([0], [0])
# + creates a new, independent object
>>> list1 = []
>>> list2 = list1
>>> list1 = list1 + [0]
>>> list1, list2
([0], [])
a += b
在這種情況下與
a = a + b
在這種情況下,cnt += 1 表示 cnt 增加 1。
請注意,如果 cnt > 0 且 len(aStr) > 1,您粘貼的代碼將無限循環。
編輯:引用卡爾邁耶:``[..] 答案誤導性地大部分是正確的。 + 和 += 之間存在細微但非常顯着的差異,請參閱Bastien 的回答。''。
Google 'python += operator' 將您帶到http://docs.python.org/library/operator.html
頁面加載后搜索 += 以獲得更詳細的答案。
僅供參考:看起來你的例子中可能有一個無限循環......
if cnt > 0 and len(aStr) > 1:
while cnt > 0:
aStr = aStr[1:]+aStr[0]
cnt += 1
cnt
大於0cnt
大於 0,循環就會繼續運行cnt
增加 1 最終結果是cnt
將始終大於 0,並且循環永遠不會退出。
+=
是就地加法運算符。
這與執行cnt = cnt + 1
。 例如:
>>> cnt = 0
>>> cnt += 2
>>> print cnt
2
>>> cnt += 42
>>> print cnt
44
該運算符通常以類似於 C 語言中的++
運算符的方式使用,用於在循環中將變量遞增i += 1
( i += 1
)
有類似的減法/乘法/除法/冪等運算符:
i -= 1 # same as i = i - 1
i *= 2 # i = i * 2
i /= 3 # i = i / 3
i **= 4 # i = i ** 4
+=
運算符也適用於字符串,例如:
>>> s = "Hi"
>>> s += " there"
>>> print s
Hi there
出於性能原因,人們傾向於建議不要這樣做,但對於大多數腳本來說,這確實不是問題。 引用“序列類型”文檔:
- 如果 s 和 t 都是字符串,則某些 Python 實現(例如 CPython)通常可以對 s=s+t 或 s+=t 形式的賦值執行就地優化。 在適用時,這種優化使二次運行時間的可能性大大降低。 此優化取決於版本和實現。 對於性能敏感的代碼,最好使用 str.join() 方法,以確保跨版本和實現的一致線性串聯性能。
str.join() 方法是指執行以下操作:
mysentence = []
for x in range(100):
mysentence.append("test")
" ".join(mysentence)
..而不是更明顯的:
mysentence = ""
for x in range(100):
mysentence += " test"
后者的問題是(除了前導空格),根據 Python 實現,每次追加時,Python 解釋器都必須在內存中創建一個新的字符串副本(因為字符串是不可變的),這將得到要附加的字符串越長,逐漸變慢。而附加到列表然后將其連接到一個字符串中是一致的速度(無論實現如何)
如果您正在進行基本的字符串操作,請不要擔心。 如果你看到一個循環,它基本上只是附加到一個字符串,考慮構造一個數組,然后"".join()
'ing。
它的意思是“將“這個”附加到當前值”
例子:
a = "你好"; 一個+=“世界”;
打印一個 now 將輸出:“hello world”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.