namedtuple._replace () non funziona come descritto nella documentazione
-
24-09-2019 - |
Domanda
I aveva problemi attuazione namedtuple._replace()
, così ho copiato il codice a ridosso della documentazione:
Point = namedtuple('Point', 'x,y')
p = Point(x=11, y=22)
p._replace(x=33)
print p
ed ho ottenuto:
Point(x=11, y=22)
invece che:
Point(x=33, y=22)
, come è mostrato nel documento.
Sto usando Python 2.6 su Windows 7
Che cosa sta succedendo?
Soluzione
Sì lo fa, funziona esattamente come documentato.
._replace
ritorna un nuovo namedtuple, non modifica l'originale, quindi è necessario scrivere questo:
p = p._replace(x=33)
Vedi qui: somenamedtuple._replace (kwargs) per maggiori informazioni.
Altri suggerimenti
Una tupla è immutabile. _replace()
restituisce una nuova tupla con le modifiche:
p = p._replace(x=33)
namedtuple._replace()
restituisce una nuova tupla; l'originale è invariata.
Sembra a me come se namedtuple è immutabile, come il suo antenato, tuple.
>>> 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
restituisce una nuova NamedTuple
dello stesso tipo, ma con valori modificati.