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

问题描述 投票:38回答:4

我在实施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

这是怎么回事?

python namedtuple
4个回答
89
投票

是的,它完全按照记录的方式工作。

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

p = p._replace(x=33)

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


15
投票

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

p = p._replace(x=33)

11
投票

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


6
投票

它看起来好像namedtuple是不可变的,就像它的祖先元组一样。

>>> 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,但值已更改。

© www.soinside.com 2019 - 2024. All rights reserved.