-2

这是我很久以来写的最短的例子之一

我创建并更新了一个 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)

我回来没有???嘿,什么给了?对不起,我是蟒蛇菜鸟。

4

4 回答 4

5

list.append()总是返回None

所以arf[2].append(3)将附加3arf并返回None

您永远不会看到此更改,arf[2]因为您会立即重新绑定arf到新创建的元组

也许这就是你想要的

arf = (arf[0], arf[1], arf[2]+[3])
于 2012-03-08T12:51:55.820 回答
3

list.append方法更改列表并返回None。这不是错误,这就是该append方法的工作原理。

于 2012-03-08T12:52:46.370 回答
1

append不[t返回新列表,它就地修改旧列表:

>>> a = [1, 2, 3]
>>> b = a.append(4)
>>> print b
None
>>> print a
[1, 2, 3, 4]
于 2012-03-08T12:53:12.667 回答
0

为了详细说明 gnibbler 的答案, list.append() 会更改列表本身,但它不会返回列表的新值。它返回None。因此,您的命令 71 以您想要的方式更改了 arf[2] 的值,但随后它立即返回None并将 arf[2] 设置为该值。

您示例中的自引用使事情变得有些模糊,但是如果您尝试使用类似的命令someothervariable=arf[2].append(3),您将看到它是如何工作的。someothervariable设置为None并且 arf[2] 有 3 附加没有明确的赋值语句。

于 2012-03-08T12:58:16.993 回答