>>> 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