为什么在Python中append()总是返回None?

为什么在Python中append()总是返回None?,python,list,append,nonetype,Python,List,Append,Nonetype,我正在学习Python,我不确定这个问题是否特定于该语言以及如何在Python中实现append。一个建议是避免使用关键字或函数作为变量名。在上面的代码中,使用列表作为变量: 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] 我建议不要使用list作

我正在学习Python,我不确定这个问题是否特定于该语言以及如何在Python中实现
append

一个建议是避免使用关键字或函数作为变量名。在上面的代码中,使用列表作为变量:

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]
我建议不要使用
list
作为变量名,因为实际上已经定义为内置类型。正如ChaseTheSun和squiguy指出的那样,没有更多的东西了

list = [1, 2, 3]

一个建议是避免使用关键字或函数作为变量名。在上面的代码中,使用列表作为变量:

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]
我建议不要使用
list
作为变量名,因为实际上已经定义为内置类型。正如ChaseTheSun和squiguy指出的那样,没有更多的东西了

list = [1, 2, 3]

append
是一种变异(破坏性)操作(它修改列表而不是返回新列表)。执行非破坏性的
append
的惯用方法是

lst = [1, 2, 3]
lst.append(4)
print(lst)  ## [1, 2, 3, 4]
为了回答您的问题,我猜想如果
append
返回了新修改的列表,用户可能会认为它是非破坏性的,也就是说,他们可能会像这样编写代码

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

并且期望
n
[1,2,3,“b”]

追加
是一种变异(破坏性)操作(它修改列表而不是返回新列表)。执行非破坏性的
append
的惯用方法是

lst = [1, 2, 3]
lst.append(4)
print(lst)  ## [1, 2, 3, 4]
为了回答您的问题,我猜想如果
append
返回了新修改的列表,用户可能会认为它是非破坏性的,也就是说,他们可能会像这样编写代码

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

并且期望
n
[1,2,3,“b”]

在Python中,变异序列的方法返回
None

考虑:

m = l.append("a")
n = l.append("b")
从Python 3.3开始,现在有更多内容:

有些集合类是可变的。加法、减法、, 或者将其成员重新安排到位,并且不返回特定项目, 永远不要返回集合实例本身,但
None

此设计决策背后的设计和历史常见问题解答(关于列表):

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

在绩效重要的情况下,制作列表副本 仅仅对它进行分类是浪费的。因此,
list.sort()
列表已就位。为了提醒你这个事实,它不会回来
已排序的列表。这样,你就不会被无意中骗到
当您需要排序副本但还需要保留
未分类的版本

在Python2.4中,添加了一个新的内置函数—
sorted()
。 此函数用于从提供的iterable创建一个新列表,并对其进行排序 并返回它


Python中有一个惯例,即变异序列的方法返回
None

考虑:

m = l.append("a")
n = l.append("b")
从Python 3.3开始,现在有更多内容:

有些集合类是可变的。加法、减法、, 或者将其成员重新安排到位,并且不返回特定项目, 永远不要返回集合实例本身,但
None

此设计决策背后的设计和历史常见问题解答(关于列表):

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

在绩效重要的情况下,制作列表副本 仅仅对它进行分类是浪费的。因此,
list.sort()
列表已就位。为了提醒你这个事实,它不会回来
已排序的列表。这样,你就不会被无意中骗到
当您需要排序副本但还需要保留
未分类的版本

在Python2.4中,添加了一个新的内置函数—
sorted()
。 此函数用于从提供的iterable创建一个新列表,并对其进行排序 并返回它


它不返回任何内容。它追加/添加到变量,以查看您是否应该使用用于在打印中追加的第一个变量

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

它不返回任何内容。它追加/添加到变量,以查看您是否应该使用用于在打印中追加的第一个变量

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

在第一个实例中,打印追加操作的结果。如果成功完成append(),它将返回“None”,如中所遇到的问题:None
append
如果有效,将返回
None
。没有比这更多的了。啊,如果原始代码中的注释提到
append
是一个
void
函数,那么就更容易理解了(至少对我来说)。这是有道理的,谢谢。大多数标准库使用的惯例是,如果一个方法应该在适当的位置改变对象,那么它应该返回
None
。在一些例外情况下,遵循此规则会使代码更难使用(
list.pop
就是一个例子)。但这些绝对是例外,而不是规则。和你问的非常相似。在第一个例子中,您需要打印追加操作的结果。如果成功完成append(),它将返回“None”,如中所遇到的问题:None
append
如果有效,将返回
None
。没有比这更多的了。啊,如果原始代码中的注释提到
append
是一个
void
函数,那么就更容易理解了(至少对我来说)。这是有道理的,谢谢。大多数标准库使用的惯例是,如果一个方法应该在适当的位置改变对象,那么它应该返回
None
。有一些例外情况下,遵循此规则会使代码更难使用(
list.pop
就是一个例子)