list.append的意外行为

时间:2014-12-05 03:24:30

标签: python list append ipython

我正在使用我的解释器来弄清楚Python append()方法的行为并找到:

In [335]: b = [].append(1)

In [336]: b

In [337]: 

In [337]: b = [].append('1')

In [338]: b

令我困惑的是因为我认为无论何时我们在列表上调用append(),我们都会在其末尾添加新对象,因此不应该在空列表上调用append()(就像我所说的那样)在上面做了)给我与我可以达到的相同结果:

In [339]: b=[] 

In [340]: b.append(1)

In [341]: b
Out[341]: [1]

我可能会有误解,所以如果我弄错了,请纠正我。

2 个答案:

答案 0 :(得分:5)

  

让我感到困惑的是因为每当我们打电话给append()时我就会想到   列表,我们在其末尾添加新对象

这是正确的。但是你忘了的是append()(像大多数改变对象的方法一样)总是在Python中返回None,因为它就地运行。所以,这样做:

b = [].append(1)

与:

相同
b = None

1在技术上已添加到列表[],但在调用append()后无法访问此列表,因为b已分配给返回值方法调用。

第二个例子工作得很好,因为你没有重新分配b,从而失去了对列表对象的引用。

答案 1 :(得分:2)

append是一种不返回任何内容的方法。因此,调用ls.append(1)会将1追加到ls的末尾,但ls.append(1)没有实际值。因此,设置b = [].append('1')会将b设置为None