为什么执行[].append(1)后返回None?

4
我这样使用Python
>>>print [].append(1)
None

>>>ls = []
>>>ls.append(1)
>>>ls
[1]

为什么 "[] .append(1)" 的值是None,而另一个则是实际值?

如果你执行 print ls.append(1),它会变得更清晰。 - SethMMorton
2个回答

13
因为append()列表方法不返回列表,它只是修改了调用它的列表。 在这种情况下,匿名列表被修改后就被丢弃了。 文档并不是非常清晰,但它所说的是:

list.append(x)

将项添加到列表末尾;相当于 a[len(a):] = [x]

对于其他方法,例如list.count(x),在描述中出现了“return”一词,这意味着如果没有“return”值,该方法则没有返回值。

1
在Python中,习惯于使用没有返回值的mutators。 - soulcheck

0

append() 不会返回修改后的列表,但是

将对象 item 添加到列表 list 的末尾。 如果成功则返回 0; 如果失败则返回 -1 并设置异常。

请参阅 http://docs.python.org/2/c-api/list.html


2
你正在链接到内部的C API文档 - 正确的链接是http://docs.python.org/2/tutorial/datastructures.html或http://docs.python.org/3.3/tutorial/datastructures.html(适用于Python 3)。 - Wander Nauta
2
那个返回值是针对内部C API的,但似乎Python层面的调用并没有返回0,因为OP显示它返回了None - unwind
1
你说得对,这并不理想。然而,更高级的Python文档没有明确说明返回什么,因此在那里你得不到有意义的引用。 - mnagel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接