55

我在实现时遇到了麻烦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

5 回答 5

112

是的,它的工作原理与文档完全一致。

._replace 返回一个新的命名元组,它不会修改原来的,所以你需要这样写:

p = p._replace(x=33)

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

于 2010-01-30T00:07:43.783 回答
17

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

p = p._replace(x=33)
于 2010-01-30T00:07:24.330 回答
11

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

于 2010-01-30T00:07:17.810 回答
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相同类型但值已更改的新值。

于 2010-01-30T00:11:37.680 回答
0

但是,是的,您是对的:在“官方”文档中,他们忘记将替换的元组分配给变量:https ://docs.python.org/3/library/collections.html?highlight=collections#collections.namedtuple

p._replace(x=33)

代替

p1 = p._replace(x33)
于 2021-10-29T13:00:13.850 回答