namedtuple._replace () no funciona como se describe en la documentación
-
24-09-2019 - |
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?
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.