NometTuple._replace () não funciona como descrito na documentação
-
24-09-2019 - |
Pergunta
Eu estava tendo problemas para implementar namedtuple._replace()
, então copiei o código logo após a documentação:
Point = namedtuple('Point', 'x,y')
p = Point(x=11, y=22)
p._replace(x=33)
print p
E eu tenho:
Point(x=11, y=22)
ao invés de:
Point(x=33, y=22)
Como é mostrado no doc.
Estou usando o Python 2.6 no Windows 7
O que está acontecendo?
Solução
Sim, funciona, funciona exatamente como documentado.
._replace
retorna Um novo nome do nome, ele não modifica o original, então você precisa escrever isso:
p = p._replace(x=33)
Veja aqui: SomenamedTuple._replace (Kwargs) Para maiores informações.
Outras dicas
Uma tupla é imutável. _replace()
Retorna uma nova tupla com suas modificações:
p = p._replace(x=33)
namedtuple._replace()
Retorna uma nova tupla; O original permanece inalterado.
Parece -me como se o nome de chamado é imutável, como seu antepassado, tupla.
>>> 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
Retorna um novo NamedTuple
do mesmo tipo, mas com os valores alterados.