>>> print [1,2,3] + [4,5]
[1,2,3,4,5]
>>> 'abc'.upper()
'ABC'
這不:
>>> print [1,2,3].extend([4,5])
None
爲什麼?你可以在裸露的字符串上使用字符串方法,那麼爲什麼你不能在裸露的序列類型(如列表)上使用方法?即使這不起作用:
>>> print list([1,2,3]).extend([4,5])
None
N.B.對於「工作」的口語意義。當然,我的預期行爲是不正確的。我只是好奇它是什麼。
P.S.我已經接受soulcheck的答案下面,他是對的,但對研究如何加法運算來實現我剛剛發現了以下工作:
>>> [1,2,3].__add__([4,5])
[1, 2, 3, 4, 5]
但想必添加方法不會修改底層對象,並創建一個新的返回,如字符串方法。
雖然字符串是不可變的,所以字符串方法不能修改原始對象,所以他們確實返回一個值?這對於說圖不起作用,因爲儘管它們像字符串一樣是不可變的,但它們沒有任何方法,因爲只有可變序列纔有方法。或者其他的東西。接受! – 2011-12-28 14:59:52
@SimonHibbs。你給的字符串和列表例子創建一個新的字符串/列表。這種約定的一個原因可能是,有時候該方法應該返回的方式有些模糊。 list.extend應該返回擴展列表嗎?布爾?新的列表大小?它也是[命令 - 查詢分離](http://en.wikipedia.org/wiki/Command-query_separation)的實現,即。如果它返回的東西,它將是一個查詢和命令在一個==邪惡。我會編輯它。 – soulcheck 2011-12-28 15:18:01