2017-01-27 80 views
3

今天我在做一些python list操作的時候注意到了一個奇怪的行爲。list + = str和list + = str有什麼區別,

比方說,

a = [] 
b = 'xy' 

當我做,一個+ = b中的解釋器返回:

a += b 
a == ['x', 'y'] 

但是當我做,一個+ = B,(用逗號)解釋返回a = ['xy']

a += b, 
a == ['xy'] 

有人可以請解釋這裏發生了什麼。

+0

@wim - 您是否在意解釋這不是鏈接問題的重複? – TigerhawkT3

+0

@ TigerhawkT3當然,這是因爲'a + = b'不是'list.extend(a,b)'(雖然* result *是相似的)。它實際上更像'a = a .__ iadd __(b)'。 – wim

+0

@wim - 我想說它更像是'list.extend',因爲'list .__ iadd__'修改了列表並且還返回了它,而'list。extend'只修改列表但不返回,像'a + = b'這樣的賦值不像其他語言那樣返回賦值。 – TigerhawkT3

回答

3
a += b 

a是一個列表,這個操作類似於a.extend(b)。所以它迭代對象b,將每個元素附加到a

如果迭代字符串'xy',則會生成兩個元素'x''y'

如果迭代元組'xy',,它會產生一個元素'xy'

1

逗號創建tuple - 所以a += b,的含義一樣a += (b,)

a += ('xy',) 

你有一個元素,因此幾乎就像

a += ['xy'] 

所以你必須

a = [] + ['xy'] 

加元組,其給出結果

a = ['xy'] 
2

a += b, 

相當於

a += (b,) 

它創建一個元組與一個項目。如果添加,則將其項目'xy'添加到a

如果添加一個字符串,如'xy',它將自行計算爲一個字符序列,並且每個序列項目(字符)將單獨添加到a

所以基本上逗號將b包裝成一個元組。

相關問題