我在实施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
这是怎么回事?
是的,它完全按照记录的方式工作。
._replace
返回一个新的namedtuple,它不会修改原始的,所以你需要写这个:
p = p._replace(x=33)
请参阅:somenamedtuple._replace(kwargs)了解更多信息。
元组是不可变的。 _replace()
返回一个包含您修改的新元组:
p = p._replace(x=33)
namedtuple._replace()
返回一个新的元组;原件没有变化。
它看起来好像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
,但值已更改。