簡體   English   中英

Python 中的 += 是什么意思?

[英]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 ,除了:

  • +總是返回一個新分配的對象,但+=應該(但不是必須)就地修改對象,如果它是可變的(例如listdict ,但intstr是不可變的)。

  • a = a + ba被評估兩次。

  • Python:簡單語句

    • 一個簡單的語句包含在單個邏輯行中。

如果這是您第一次遇到+=運算符,您可能想知道為什么它可以就地修改對象而不是構建新對象很重要。 下面是一個例子:

# 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大於0
  • 只要cnt大於 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

出於性能原因,人們傾向於建議不要這樣做,但對於大多數腳本來說,這確實不是問題。 引用“序列類型”文檔

  1. 如果 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.

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