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,但不确定此问题是否特定于该语言以及如何在Python中实现
append
。#1 楼
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"]
#2 楼
按照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开始,现在更多明确记录的内容:
某些集合类是可变的。添加,减去,
或重新排列其成员的方法,并且不返回特定项,
永远不会返回集合实例本身,而是
None
。设计和历史记录常见问题解答给出了此设计决策背后的理由(关于列表):
list.sort(
为什么不返回排序后的列表?/>在性能很重要的情况下,仅复制列表进行复制会很浪费。因此,
list.sort()
对列表进行适当排序。为了提醒您这个事实,它不会返回已排序的列表。这样,当您需要排序的副本但又需要保留未排序的版本时,您不会被误认为
覆盖列表。
在Python 2.4中已添加新的内置函数
sorted()
。此函数根据提供的可迭代对象创建一个新列表,对其进行排序
并返回它。
#3 楼
建议之一是避免将关键字或函数用作变量名。在上面的代码中,您将list用作变量:list = [1, 2, 3]
我建议不要将
list
用作变量名,因为list实际上已经定义为内置类型。正如ChaseTheSun和squiguy指出的那样,那么就没有更多了。l = [1, 2, 3]
l.append(4)
print l ## [1, 2, 3, 4]
#4 楼
它不返回任何东西。它将附加/添加到变量,以查看您应该使用用于附加到print中的第一个变量friends=["Rajendra V"]
friends.append("John")
print(friends)
评论
首先,您将打印追加操作的结果。如果append()成功完成,则返回“ None”,例如遇到的问题:无如果有效,则append将返回None。没有比这更多的了。
嗯,如果原始代码中的注释提到了append是void函数,那么(至少对我来说)会更容易理解。这很有意义,谢谢。
大多数标准库使用的约定是,如果应该使用某种方法来改变对象的位置,则该方法应返回None。在某些例外情况下,遵循此规则会使代码更难使用(list.pop是一个示例)。但是这些绝对是例外,而不是常规。
这个问题与您提出的问题非常相似。也可以在那里查看答案。