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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top