Tupel sind genau wie Listen, außer dass sie unveränderlich wie Strings sind, d.h. man kann Tupel nicht abändern. Tupel werden definiert, indem man durch Komma getrennte Objekte innerhalb eines normalen Klammerpaars angibt. Tupel werden normalerweise immer dann gebraucht, wenn eine Anweisung oder eine benutzerdefinierte Funktion mit Sicherheit davon ausgehen kann, dass die verwendete Sammlung von Werten, d.h. das Wertetupel, sich nicht verändern wird.
Beispiel 9.2. Benutzung von Tupeln (tupel.py)
#!/usr/bin/python zoo = ('Wolf', 'Elefant', 'Pinguin') print 'Die Zahl der Tiere im Zoo ist', len(zoo) neuer_zoo = ('Affe', 'Delfin', zoo) print 'Die Zahl der Tiere im neuen Zoo ist', len(neuer_zoo) print 'Alle Tiere im neuen Zoo sind', neuer_zoo print 'Die aus dem alten Zoo uebernommenen Tiere sind', neuer_zoo[2] print 'Das letzte aus dem alten Zoo uebernommene Tier ist ein', neuer_zoo[2][2]
$ python tupel.py Die Zahl der Tiere im Zoo ist 3 Die Zahl der Tiere im neuen Zoo ist 3 Alle Tiere im neuen Zoo sind ('Affe', 'Delfin', ('Wolf', 'Elefant', 'Pinguin')) Die aus dem alten Zoo uebernommenen Tiere sind ('Wolf', 'Elefant', 'Pinguin') Das letzte aus dem alten Zoo uebernommene Tier ist ein Pinguin
Die Variable zoo
bezeichnet ein Tupel von Objekten.
Wir erkennen, dass die Funktion len
eingesetzt
werden kann, um die Länge des Tupels zu ermitteln. Dies zeigt außerdem,
dass auch ein Tupel eine Sequenz ist.
Wir transferieren diese Tiere nun in einen neuen Zoo, weil der alte Zoo
geschlossen wird. Daher erhält das Tupel neuer_zoo
einige Tiere, die bereits dort vorhanden sind, zusammen mit den Tieren,
die vom alten Zoo übernommen worden sind. Um zur Realität zurückzukehren,
beachten Sie, dass ein Tupel innerhalb eines Tupels nicht seine Identität
verliert.
Wir können auf die Objekte in einem Tupel zugreifen, indem wir die Position
des Objekts innerhalb eines Paars eckiger Klammern angeben, genau wie wir
es bei den Listen getan haben. Dies wird der Indizierungsoperator
genannt. Wir greifen auf das dritte Objekt in neuer_zoo
mittels neuer_zoo[2]
zu. Dies ist ziemlich einfach,
wenn man einmal die Schreibweise verstanden hat.
Tupel mit keinem oder nur einem Objekt.
Ein leeres Tupel wird durch ein leeres Klammerpaar gebildet,
etwa meinleerestupel = ()
. Ein Tupel mit
nur einem einzigen Objekt ist jedoch nicht so einfach. Sie müssen
es durch ein auf das erste (und einzige) Objekt folgendes Komma
kennzeichnen, damit Python zwischen einem Tupel und einem Klammerpaar
unterscheiden kann, das einfach nur ein Objekt in einem Ausdruck umschließt,
d.h. Sie müssen einzelnesetwas = (2 , )
schreiben,
wenn Sie ein Tupel meinen, das nur die Zahl 2
enthält.
Eine Liste innerhalb einer Liste verliert nicht ihre Identität, d.h. Listen werden nicht automatisch "plattgebügelt" wie in Perl. Das Gleiche gilt für ein Tupel innerhalb eines Tupels, oder ein Tupel innerhalb einer Liste, oder eine Liste innerhalb eine Tupels usw. Soweit es Python betrifft, sind dies nur Objekte, die mittels eines anderen Objekts gespeichert werden, das ist alles.
Eine der häufigsten Anwendungen von Tupeln ist bei der print-Anweisung. Hier ist ein Beispiel:
Beispiel 9.3. Ausgabe mittels Tupeln (print_tupel.py)
#!/usr/bin/python alter = 22 name = 'Swaroop' print '%s ist %d Jahre alt.' % (name, alter) print 'Warum spielt %s mit diesem Python?' % name
Der print
-Anweisung kann man einen String mit speziellen
Angaben übergeben, der von einem %
-Zeichen und einem Tupel
von Objekten gefolgt wird, die auf die Angaben in dem String passen.
Diese Angaben werden dazu benutzt, die Ausgabe in einer bestimmten Weise
zu formatieren. Sie können zum Beispiel aus einem %s
für Strings und %d
für Ganzzahlen bestehen. Das Tupel
muss Objekte haben, die diesen Angaben in der gleichen Reihenfolge entsprechen.
Beachten Sie die erste Anwendung, wo wir zuerst %s
benutzen, was der Variablen name
entspricht, die das
erste Objekt in dem Tupel ist, und als zweite Angabe %d
,
was alter
entspricht, dem zweiten Objekt im Tupel.
Python wandelt hier jedes Objekt des Tupels in einen String um
und setzt diese anstelle der Formatierungsangaben. Daher wird
%s
durch den Wert der Variablen name
ersetzt und so weiter.
Dieser Gebrauch der print
-Anweisung macht es äußerst
einfach, Ausgaben auf den Bildschirm zu schreiben, und vermeidet eine
Menge von String-Manipulationen, mit denen man das Gleiche erreichen könnte.
Man kann so auch vermeiden, Kommas zu benutzen, wie wir es bisher
gemacht haben.
Meistens kann man die Angabe %s
verwenden, und sich
Python um den Rest kümmern lassen. Das funktioniert sogar für Zahlen.
Sie können aber auch die korrekten Angaben machen, um damit eine weitere
Überprüfung auf Korrektheit in Ihr Programm einzubauen.
In der zweiten print
-Anweisung benutzen wir eine
einzelne Formatierungsangabe, die von einem %
-Zeichen
und einem einzelnen Objekt gefolgt wird - hier gibt es kein Klammerpaar.
Dies funktioniert aber nur in dem Fall, dass nur eine einzelne
Formatierungsangabe im String vorhanden ist.