Zuweisungen mit der Tupelschreibweise
Eine Zuweisung kann auf ihrer linken Seite auch Bindungsstellen (wie z.B. Namen) in Tupelschreibweise und auf ihrer rechten Seite ein Iterables haben.
Die einzelnen Objekte des Iterablen werden dann in der gegebenen Reihenfolge an die einzelnen Bindungsstellen gebunden.
- Konsolenprotokoll
x, y = 1, 2
x
1
y
2
Die von der der voranstehenden Zuweisung bewirkte Änderung ist wie die von den folgenden beiden Zuweisungen bewirkte Änderung.
- Konsolenprotokoll
x = 1
y = 2
x
1
y
2
Einklammern ändert im allgemeinen nichts an der Bedeutung.
- Konsolenprotokoll
( x, y )= 1, 2
x
1
y
2
- Konsolenprotokoll
x, y =( 1, 2 )
x
1
y
2
- Konsolenprotokoll
( x, y )=( 1, 2 )
x
1
y
2
Im nächsten Beispiel ist das Iterable eine Liste.
- Beispiel
x, y =[ 1, 2 ]
x
1
y
2
Im nächsten Beispiel ist das Iterable eine Zeichenfolge.
- Beispiel
a, b = "xy"
a
'x'
b
'y'
Im nächsten Beispiel ist die linke Seite ein einfacher Name, dann wird das Tupel der rechten Seite einfach an diesen Namen gebunden (wie schon früher verwendet).
- Beispiel
x = 1, 2
x
(1, 2)
Im nächsten Beispiel verwendet die linke Seite wieder die Tupelschreibweise und die rechte Seite das Iterable ›x‹ aus dem vorigen Beispiel.
- Beispiel
a, b = x
a
1
b
2
Die Anzahl der Kommas
Im allgemeinen muß die Anzahl der Kommas auf der linken und rechten Seite einer Bindungsanweisung gleich sein.
- Beispiel (übersetzt)
a, b = 1, 2, 3
WertFehler: zu viele Werte zum Entpacken (zwei erwartet)
Im allgemeinen muß die Anzahl der Kommas auf der linken und rechten Seite einer Bindungsanweisung gleich sein.
- Beispiel (übersetzt)
a, b, c = 1, 2
WertFehler: zu wenig Werte zum Entpacken (drei benoetigt, zwei gefunden)
Das Reststernchen
- Beispiel
x, y, *z = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
x
0
y
1
z
[2, 3, 4, 5, 6, 7, 8, 9]
- Beispiel
x, y, *z = 0, 1
x
0
y
1
z
[]
Übungsaufgaben
/ Übungsaufgabe
Schreiben Sie eine Funktion namens »f«, deren Aufrufsausdruck »f()« ein Paar aus der Zahl «1» und der Zeichenfolge »a« als Wert hat, so daß sich der folgende Konsolendialog ergibt (dabei soll die Auslassung »…« durch einen bestimmten Text ersetzt werden).
- Konsolendialog
f = lambda: …
n, s = f()
n
1
s
'a'
Sie können auch den folgenden Test benutzen, um zu erkennen, ob ihre Lösung korrekt ist.
- Test
t = lambda f: f() ==( 1, 'a' )
Wenn «t( f )» ›True‹ ergibt, ist Ihre Lösung richtig.
/ Übungsaufgabe
Schreiben Sie eine Anweisung, welche die Bindungen der Namen »x« und »y« vertauscht.
(Wenn der Name »x« bisher an das Objekt o₀ und der Name »y« bisher an das Objekt o₁ gebunden war, soll der Name »x« hinterher also an das Objekt o₁ und der Name »y« an das Objekt o₀ gebunden sein.)