namedtuple._replace () ne fonctionne pas comme décrit dans la documentation
-
24-09-2019 - |
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?
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.