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中实现的。
一个建议是避免使用关键字或函数作为变量名。在上面的代码中,您使用list作为变量:
list = [1, 2, 3]
我建议不要使用list
作为变量名,因为list实际上已经被定义为内置类型。正如ChaseTheSun和squigy指出的那样,没有更多的东西了
lst = [1, 2, 3]
lst.append(4)
print(lst) ## [1, 2, 3, 4]
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创建一个新列表,对其进行排序并返回。
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。