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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top