我在实施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
发生了什么事?
答案 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
但值已更改。