list = [1, 2, 3]
print list.append(4) ## NO, does not work, append() returns None
## Correct pattern:
list.append(4)
print list ## [1, 2, 3, 4]
我正在学习Python,我不确定这个问题是否特定于该语言以及如何在Python中实现追加。
答案 0 :(得分:45)
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"]
答案 1 :(得分:12)
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
。
此设计决策背后的设计和历史常见问题gives the reasoning(关于列表):
为什么不
list.sort(
)返回排序列表?在表现很重要的情况下,制作一份清单副本 只是为了排序它会很浪费。因此,
list.sort()
对此进行排序 列表到位。为了提醒你这个事实,它不会回来 排序清单。这样,你就不会被意外愚弄 在需要排序副本时覆盖列表但也需要保留 未分类的版本。在Python 2.4中添加了一个新的内置函数 -
sorted()
。 此函数从提供的iterable中创建一个新列表,对其进行排序 并将其归还。
答案 2 :(得分:5)
建议的一个方面是避免使用关键词或函数作为变量名。在上面的代码中,您使用list作为变量:
list = [1, 2, 3]
我建议不要将list
用作变量名,因为list实际上已经定义为内置类型。正如ChaseTheSun和squiguy指出的那样,它没有更多的东西
l = [1, 2, 3]
l.append(4)
print l ## [1, 2, 3, 4]
答案 3 :(得分:0)
它不返回任何内容。它会附加/添加到变量中,以查看您应该使用用于附加到print中的第一个变量
friends=["Rajendra V"]
friends.append("John")
print(friends)