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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top