为什么追加()总是在Python返回None? [重复]

问题描述 投票:40回答:4

这个问题已经在这里有一个答案:

list = [1, 2, 3]
print list.append(4)   ## WRONG, print does not work, append() returns None

## RIGHT:
list.append(4)
print list  ## [1, 2, 3, 4]

我正在学习Python和我不知道如果这个问题是特定于语言和append是如何用Python实现。

python list append nonetype
4个回答
51
投票

append是一个突变(破坏性)操作(它会修改的地方,而不是返回一个新的列表的列表)。惯用的方式做无损相当于append

l = [1,2,3]
print l + [4] # [1,2,3,4]
print l # [1,2,3]

回答你的问题,我的猜测是,如果append返回新修改的列表中,用户可能会认为它是无损的,即它们可以编写代码一样

m = l.append("a")
n = l.append("b")

并期望n[1,2,3,"b"]


16
投票

这是Python中的约定,该变异序列的方法返回None

考虑:

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

在Python 3.3开始,这是现在比较explicitly documented

一些集合类是可变的。那加,减,或重新安排其成员的地方,不返回一个特定项目的方法,从未返回集合实例本身,而是None

这个设计决定(相对于表)背后的设计和历史FAQ gives the reasoning

为什么不list.sort()返回排序列表?

在情况下的性能问题,使得列表的副本只是排序就有些浪费。因此,list.sort()排序到位名单。为了提醒大家的是事实,它不返回排序列表。这样一来,你就不会上当,不小心覆盖列表,当你需要一个排序的副本,但还需要保持无序版本各地。

在Python 2.4中一个新的内置功能 - sorted() - 已添加。这个函数创建了一个从提供迭代一个新的列表,排序,并返回。


5
投票

建议的一个字是避免使用关键词或功能变量名称。在上面的代码中,你可以使用列表作为变量:

list = [1, 2, 3]

我建议不要使用list作为作为list实际上已被定义为一个内置类型的变量名。作为ChaseTheSun和squiguy指出的那样,没有那么更给它

l = [1, 2, 3]
l.append(4)
print l  ## [1, 2, 3, 4]

0
投票

它不返回任何东西。其附加/添加到变量,看你应该使用哪一个用于打印附加的第一个变量

friends=["Rajendra V"]
friends.append("John")
print(friends)
© www.soinside.com 2019 - 2024. All rights reserved.