Pet*_*art 41 python namedtuple
我在实现时遇到了问题namedtuple._replace(),因此我直接从文档中复制了代码:
Point = namedtuple('Point', 'x,y')
p = Point(x=11, y=22)
p._replace(x=33)
print p
Run Code Online (Sandbox Code Playgroud)
我得到了:
Point(x=11, y=22)
Run Code Online (Sandbox Code Playgroud)
代替:
Point(x=33, y=22)
Run Code Online (Sandbox Code Playgroud)
正如文件中所示.
我在Windows 7上使用Python 2.6
这是怎么回事?
ang*_*son 91
是的,它完全按照记录的方式工作.
._replace 返回一个新的namedtuple,它不会修改原始的,所以你需要写这个:
p = p._replace(x=33)
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参见:somenamedtuple._replace(kwargs).
Max*_*keh 16
元组是不可变的._replace()返回一个包含修改的新元组:
p = p._replace(x=33)
Run Code Online (Sandbox Code Playgroud)
它看起来好像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)
Run Code Online (Sandbox Code Playgroud)
NamedTuple._replace返回NamedTuple相同类型的新类,但值已更改.