namedtuple._replace () funktioniert nicht wie in der Dokumentation beschrieben
-
24-09-2019 - |
Frage
Ich habe Schwierigkeiten, namedtuple._replace()
Implementierung, so dass ich den Code direkt aus der Dokumentation kopiert:
Point = namedtuple('Point', 'x,y')
p = Point(x=11, y=22)
p._replace(x=33)
print p
und ich habe:
Point(x=11, y=22)
statt:
Point(x=33, y=22)
, wie in dem doc gezeigt.
Ich verwende Python 2.6 auf Windows 7
Was ist los?
Lösung
Ja, es funktioniert, es funktioniert genau so, wie dokumentiert.
._replace
Rückgabe ein neues namedtuple, ist es nicht das Original ändern, so dass Sie diese schreiben müssen:
p = p._replace(x=33)
Sehen Sie hier: somenamedtuple._replace (kwargs) für weitere Informationen.
Andere Tipps
Ein Tupel ist unveränderlich. _replace()
gibt ein neues Tupel mit Ihren Änderungen:
p = p._replace(x=33)
namedtuple._replace()
gibt ein neues Tupel; das Original unverändert.
Es scheint mir, als ob namedtuple unveränderlich ist, wie sein Vorfahr, Tupel.
>>> 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
gibt einen neuen NamedTuple
des gleichen Typs, jedoch mit geänderten Werte.