我正在使用我的解释器来弄清楚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]
我可能会有误解,所以如果我弄错了,请纠正我。
答案 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
。