Pregunta

Yo estaba teniendo problemas para implementar namedtuple._replace(), por lo que he copiado el código justo al lado de la documentación:

Point = namedtuple('Point', 'x,y')

p = Point(x=11, y=22)

p._replace(x=33)

print p

y tengo:

Point(x=11, y=22)

en lugar de:

Point(x=33, y=22)

como se muestra en el doc.

Estoy usando Python 2.6 en Windows 7

¿Qué está pasando?

¿Fue útil?

Solución

Si lo hace, funciona exactamente como se documenta.

._replace retornos una nueva namedtuple, no modifica el original, por lo que necesita para escribir esto:

p = p._replace(x=33)

Vea aquí: somenamedtuple._replace (kwargs) para más información.

Otros consejos

Una tupla es inmutable. vuelve _replace() una nueva tupla con sus modificaciones:

p = p._replace(x=33)

namedtuple._replace() devuelve una nueva tupla; el original no se modifica.

A mi me parece como si namedtuple es inmutable, al igual que su antecesor, 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 devuelve un nuevo NamedTuple del mismo tipo pero con valores modificados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top