为什么在Python中append()总是返回None?

更改序列的方法返回None是Python语言中的一个约定。

考虑一下:

代码语言:javascript复制>>> a_list = [3, 2, 1]

>>> print a_list.sort()

None

>>> a_list

[1, 2, 3]

>>> a_dict = {}

>>> print a_dict.__setitem__('a', 1)

None

>>> a_dict

{'a': 1}

>>> a_set = set()

>>> print a_set.add(1)

None

>>> a_set

set([1])从Python3.3开始,现在更多的是explicitly documented

某些集合类是可变的。添加、减去或重新排列其成员的方法不返回特定项,而不返回集合实例本身,而是返回None。

此设计决策背后的设计和历史常见问题解答gives the reasoning (与列表相关):

list.sort(**)

为什么不返回排序列表?**

在性能很重要的情况下,仅仅为了对列表进行排序而制作列表副本将是浪费的。因此,list.sort()在适当的位置对列表进行排序。为了提醒您这一事实,它不返回排序列表。这样,当您需要一个排序的副本,但又需要保留未排序的版本时,您就不会被误认为覆盖了一个列表。

在Python2.4中添加了一个新的内置函数- sorted()。此函数从提供的迭代器创建一个新列表,对其进行排序并返回。