J'avais du mal à implémenter namedtuple._replace()
, j'ai donc copié le code tout de suite de la documentation:
Point = namedtuple('Point', 'x,y')
p = Point(x=11, y=22)
p._replace(x=33)
print p
et j'ai eu:
Point(x=11, y=22)
au lieu de:
Point(x=33, y=22)
comme le montre le doc.
J'utilise Python 2.6 sur Windows 7
Que se passe-t-il?
Oui, cela fonctionne exactement comme documenté.
._replace
renvoie un nouveau tuple nommé, il ne modifie pas l'original, vous devez donc écrire ceci:
p = p._replace(x=33)
Voir ici: somenamedtuple._replace (kwargs) pour plus d'informations.
Un tuple est immuable. _replace()
renvoie un nouveau Tuple avec vos modifications:
p = p._replace(x=33)
namedtuple._replace()
renvoie un nouveau Tuple; l'original est inchangé.
Il me semble que namedtuple est immuable, comme son ancêtre, 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
renvoie un nouveau NamedTuple
du même type mais avec des valeurs modifiées.