更改序列的方法返回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()。此函数从提供的迭代器创建一个新列表,对其进行排序并返回。