Question

J'avais du mal à mettre en œuvre namedtuple._replace(), donc je copiais le code à droite de la documentation:

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

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

p._replace(x=33)

print p

et je suis arrivé:

Point(x=11, y=22)

au lieu de:

Point(x=33, y=22)

comme il est indiqué dans le doc.

J'utilise Python 2.6 sous Windows 7

Qu'est-ce qui se passe?

Était-ce utile?

La solution

Oui il le fait, il fonctionne exactement comme indiqué.

._replace retourne une nouvelle namedtuple, il ne modifie pas l'original, donc vous devez écrire ceci:

p = p._replace(x=33)

Voir ici: somenamedtuple._replace (kwargs) pour plus d'informations.

Autres conseils

A tuple est immuable. _replace() retourne une nouvelle ligne, avec vos modifications:

p = p._replace(x=33)

namedtuple._replace() retourne un nouveau tuple; l'original est inchangé.

Il me semble que si namedtuple est immuable, comme son aïeul, 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 retourne une nouvelle NamedTuple du même type mais avec des valeurs modifiées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top