Nim*_*iri 49 python list append nonetype
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]
Run Code Online (Sandbox Code Playgroud)
我正在学习Python,我不确定这个问题是否特定于语言以及如何在Python中实现append.
xua*_*nji 53
append是一个变异(破坏性)操作(它修改了列表而不是返回一个新列表).做非破坏性等价物的惯用方法append是
l = [1,2,3]
print l + [4] # [1,2,3,4]
print l # [1,2,3]
Run Code Online (Sandbox Code Playgroud)
为了回答你的问题,我的猜测是,如果append返回新修改的列表,用户可能会认为它是非破坏性的,即他们可能会编写像
m = l.append("a")
n = l.append("b")
Run Code Online (Sandbox Code Playgroud)
并期望n成为[1,2,3,"b"]
Ste*_*ski 16
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])
Run Code Online (Sandbox Code Playgroud)
从Python 3.3开始,现在更明确地记录了这一点:
一些集合类是可变的.添加,删除或重新安排其成员的方法,并且不返回特定项,从不返回集合实例本身
None.
设计和历史常见问题解答给出了此设计决策背后的原因(关于列表):
为什么不
list.sort(返回排序列表?在性能很重要的情况下,制作列表的副本只是为了对它进行排序将是浪费.因此,
list.sort()将列表排序到位.为了提醒您这一事实,它不会返回排序列表.这样,当您需要排序副本时,您不会被意外地覆盖列表,但也需要保留未排序的版本.在Python 2.4中添加了一个新的内置函数 -
sorted().此函数从提供的iterable创建一个新列表,对其进行排序并返回它.
小智 5
建议之一是避免将关键字或函数用作变量名。在上面的代码中,您将list用作变量:
list = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我建议不要使用list变量名,因为列表实际上已经定义为内置类型。正如ChaseTheSun和squiguy所指出的,那时没有什么更多的了。
l = [1, 2, 3]
l.append(4)
print l ## [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48528 次 |
| 最近记录: |