这是我很长一段时间写的最短的例子之一
我创建并更新了一个tuple3
In [65]: arf=(0,1,[1,2,3])
In [66]: arf=(arf[0],arf[1], arf[2] )
In [67]: arf
Out[67]: (0, 1, [1, 2, 3])
所以重新分配工作。
现在我尝试改变它的内容。
In [69]: arf=(arf[0],arf[1], [2] )
In [70]: arf
Out[70]: (0, 1, [2])
In [71]: arf=(arf[0],arf[1], arf[2].append(3) )
In [72]: arf
Out[72]: (0, 1, None)
我回来无???嘿,是什么给出的?对不起,我是一个蟒蛇菜鸟。
答案 0 :(得分:5)
list.append()
始终返回None
因此arf[2].append(3)
会将3
追加到arf
并返回None
您永远不会看到arf[2]
的此更改,因为您立即将arf
重新绑定到新创建的元组
也许这就是你想要的
arf = (arf[0], arf[1], arf[2]+[3])
答案 1 :(得分:3)
list.append
方法会更改列表并返回None
。这不是错误,这只是append
方法的工作方式。
答案 2 :(得分:1)
append
没有[返回新列表,它就地修改了旧列表:
>>> a = [1, 2, 3]
>>> b = a.append(4)
>>> print b
None
>>> print a
[1, 2, 3, 4]
答案 3 :(得分:0)
为了详细说明gnibbler的答案,list.append()会更改列表本身,但它不会返回列表的新值。它返回None
。因此,您的命令71以您希望的方式更改arf [2]的值,但随后它立即返回None
并将arf [2]设置为该值。
示例中的自引用会使事情变得模糊,但如果您尝试someothervariable=arf[2].append(3)
之类的命令,您将看到它是如何工作的。 someothervariable
设置为None
,arf [2]附加3而没有明确的赋值语句。