A Byte of Python

Tupel

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.

Benutzung von Tupeln

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]
				
				

Ausgabe

				
$ 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
				
				

So funktioniert es

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.

Anmerkung für Perl-Programmierer

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.

Tupel und die print-Anweisung

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
				
				

Ausgabe

				
$ python print_tuple.py
Swaroop ist 22 Jahre alt.
Warum spielt Swaroop mit diesem Python?
				
				

So funktioniert es

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.