我在实现时遇到了麻烦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
这是怎么回事?
我在实现时遇到了麻烦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
返回一个新的命名元组,它不会修改原来的,所以你需要这样写:
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
相同类型但值已更改的新值。
但是,是的,您是对的:在“官方”文档中,他们忘记将替换的元组分配给变量:https ://docs.python.org/3/library/collections.html?highlight=collections#collections.namedtuple
p._replace(x=33)
代替
p1 = p._replace(x33)