这个问题已经在这里有一个答案:
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实现。
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"]
这是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()
- 已添加。这个函数创建了一个从提供迭代一个新的列表,排序,并返回。
建议的一个字是避免使用关键词或功能变量名称。在上面的代码中,你可以使用列表作为变量:
list = [1, 2, 3]
我建议不要使用list
作为作为list实际上已被定义为一个内置类型的变量名。作为ChaseTheSun和squiguy指出的那样,没有那么更给它
l = [1, 2, 3]
l.append(4)
print l ## [1, 2, 3, 4]
它不返回任何东西。其附加/添加到变量,看你应该使用哪一个用于打印附加的第一个变量
friends=["Rajendra V"]
friends.append("John")
print(friends)