16.5 Benannte Tupel 

Viele Funktionen der Standardbibliothek geben ihr Ergebnis in Form eines benannten Tupels zurück. Das ist ein Tupel, dessen Felder jeweils einen Namen tragen. Auf die Werte des Tupels kann über die Feldnamen zugegriffen werden, weswegen benannte Tupel zu einem lesbareren Code führen. Ein Beispiel für ein benanntes Tupel ist version_info im Modul sys der Standardbibliothek, das die Version des Python-Interpreters angibt.
>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=6, micro=0, releaselevel='final', serial=0)
Auf die Felder eines benannten Tupels kann wie auf Attribute zugegriffen werden:
>>> sys.version_info.major
3
Ein benanntes Tupel kann mithilfe der Funktion namedtuple des Moduls collections erzeugt werden.
namedtuple(typename, field_names, [verbose, rename])
Die Funktion namedtuple erzeugt einen neuen, vom Basisdatentyp tuple abgeleiteten Datentyp mit dem Namen typename. Instanzen dieses Datentyps erlauben es, über feste Namen auf die einzelnen Elemente des zugrunde liegenden Tupels zuzugreifen.
Über den Parameter field_names werden die Namen der Elemente des Tupels festgelegt. Hier kann entweder eine Liste von Strings übergeben werden oder ein einzelner String, in dem die Namen durch Leerzeichen oder Kommata voneinander getrennt stehen. Die Namen müssen den Regeln eines Python-Bezeichners folgen und dürfen zusätzlich nicht mit einem Unterstrich beginnen. Die Feldnamen sind nach der Erzeugung des Datentyps in dem statischen Attribut _fields gespeichert.
>>> Buch = collections.namedtuple("Buch",
... ["titel", "autor", "seitenzahl", "ISBN"])
>>> py = Buch("The Art of Computer Programming", "Donald E. Knuth",
... 3168, "978-0321751041")
>>> py.autor
'Donald E. Knuth'
>>> py[1]
'Donald E. Knuth'
>>> Buch._fields
('titel', 'autor', 'seitenzahl', 'ISBN')
Bei der Instanziierung eines benannten Tupels, in diesem Fall des Datentyps Buch, müssen Werte für alle Felder des Tupels angegeben werden. Danach kann sowohl über einen Index als auch über den zugeordneten Namen auf ein Feld zugegriffen werden.
Wenn für den Parameter rename der Wert True übergeben wird, werden ungültige Feldnamen akzeptiert. Auf solche Felder kann dann nur noch über ihren Index zugegriffen werden. Der Parameter rename ist mit False vorbelegt, was im Falle ungültiger Feldnamen eine ValueError-Exception auslöst.
Der mit False vorbelegte Parameter verbose steuert, ob nach dem Erzeugen des Datentyps dessen Klassendefinition ausgegeben wird.