namedtuple._replace()不能像文档中描述的那样工作

时间:2010-01-30 00:03:53

标签: python namedtuple

我在实施namedtuple._replace()时遇到了问题,因此我直接从文档中复制了代码:

Point = namedtuple('Point', 'x,y')

p = Point(x=11, y=22)

p._replace(x=33)

print p

我得到了:

Point(x=11, y=22)

而不是:

Point(x=33, y=22)

如文档中所示。

我在Windows 7上使用Python 2.6

发生了什么事?

4 个答案:

答案 0 :(得分:86)

是的,它完全符合记录。

._replace 返回一个新的namedtuple,它不会修改原文,所以你需要写这个:

p = p._replace(x=33)

请参阅此处:somenamedtuple._replace(kwargs)了解更多信息。

答案 1 :(得分:15)

元组是不可变的。 _replace()会返回一个包含修改的新元组:

p = p._replace(x=33)

答案 2 :(得分:11)

namedtuple._replace()返回一个新元组;原件没有变化。

答案 3 :(得分:6)

在我看来,这个名字是不可变的,就像它的祖先元组一样。

>>> from collections import namedtuple
>>> Point = namedtuple('Point', 'x,y')
>>>
>>> p = Point(x=11, y=22)
>>>
>>> p._replace(x=33)
Point(x=33, y=22)
>>> print(p)
Point(x=11, y=22)
>>> p = p._replace(x=33)
>>> print(p)
Point(x=33, y=22)

NamedTuple._replace会返回相同类型的新NamedTuple但值已更改。