当前位置: 首页 > 知识库问答 >
问题:

为什么append()总是返回无在Python中?[复制]

司马羽
2023-03-14
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中实现的。

共有3个答案

狄侯林
2023-03-14

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

list = [1, 2, 3]

我建议不要使用list作为变量名,因为list实际上已经被定义为内置类型。正如ChaseTheSun和squigy指出的那样,没有更多的东西了

lst = [1, 2, 3]
lst.append(4)
print(lst)  ## [1, 2, 3, 4]
谢雅珺
2023-03-14

Python中的一个约定是,变异序列的方法返回

考虑:

>>> 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()对列表进行适当排序。为了提醒您这一事实,它不会返回已排序的列表。这样,当你需要一个已排序的副本,但也需要保留未排序的版本时,你就不会被愚弄到意外地覆盖列表。

在Python 2.4中,添加了一个新的内置函数sorted()。此函数用于根据提供的iterable创建一个新列表,对其进行排序并返回。

梁宏才
2023-03-14

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

 类似资料:
  • 问题内容: 不确定此问题是否特定于该语言以及如何在中实现。 问题答案: append是一种变异(破坏性)操作(它会在适当位置修改列表,而不是返回新列表)。进行无损等效的惯用方式append是 回答你的问题,我的猜测是,如果返回新修改的列表,用户可能会认为它是非破坏性的,即他们可能会编写如下代码 并期望成为

  • 问题内容: 在CSS中定义时,总是返回空。 但是,如果您在该元素中设置样式,则可以获取style.display详细信息。 我的问题不同。 内联样式不是编码的好方法。因此,我们总是在CSS中分配样式。但是,为什么在提供style属性而不是通过element 时却显示为空?JavaScript是否特别无法读取style属性? 您可以在下面检查,即使我提供了,所有样式属性都为空。 为什么? 问题答案:

  • 问题内容: 我有以下代码。应该返回表的最后一行的mysqli_insert_id()(在本例中为“ $ last_row”)始终返回0。为什么会这样呢? 问题答案: 并 没有 返回表的最后一排的ID。从文档中,它: …返回由查询产生的ID,该查询是对具有具有AUTO_INCREMENT属性的列的表进行的。如果最后一个查询不是or 语句,或者如果修改后的表没有带有属性的列,则此函数 将返回零 。 (

  • 问题内容: 我找到了JavaDoc的方法: 返回:如果此线程已被中断,则返回true;否则返回false。 否则为假。 我对这种方法的理解有误。此外,我可能会误解Thread中的“中断”概念。 欢迎任何解释!谢谢! 程式码片段: 在线程定义中: 调用: 问题答案: 引发异常后,线程不再处于中断状态。

  • 问题内容: 我一直在获取要使用mysqli返回的行数方面遇到麻烦。即使确实有一些结果,我每次都会得到0。 为什么没有显示正确的数字? 问题答案: 您需要先调用num_rows查找: 请参阅文档,该文档显示在页面顶部附近(在主要说明区域中)…

  • 初学者问题,很抱歉,如果这不是一个合适的地方,请尝试学习在中逻辑是如何工作的,我无法理解这一点 我希望它会说“是的!”如果是A、A、D或D,而是z,但出于某种原因,它会说“是的!”无论第一个符号是什么,都会断开,并且只检查第二个符号是否为z。