Exkurs: Mehrfachzuweisung#

Wenn wir bisher Variablen definiert haben, dann haben wir in jeder Zeile immer genau ein Objekt einem Variablennamen zugewiesen. Z.B. so:

x = 1
y = 2

Es gibt in Python aber auch die Möglichkeit mehrere Variablenzuweisungen in einer Zeile vorzunehmen. Dazu schreibt man mehrere Variablennamen mit einem Komma getrennt links neben das Gleichheitszeichen und genau so viele Objekte/Werte rechts neben das Gleichheitszeichen. Der erste Wert wird dann dem ersten Variablennamen zugewiesen, der zweite Wert dem zweiten Variablennamen usw. …

Statt

x = 1
y = 2

könnte man also auch

x, y = 1, 2

schreiben. Das Ergebnis ist dasselbe. Die 1 wird dem x und die 2 dem y zugewiesen. Es ist nicht wirklich zu empfehlen, eine solche Schreibweise standardmäßig zu benutzen, da die Leserlichkeit des Codes eher verringert wird. In manchen Situationen kann es dennoch praktisch sein.

Ein sinnvoller Einsatz ist die Mehrfachzuweisung v.a., wenn eine Funktion mehrere Ausgabewerte d.h. mehrere Objekte zurückgibt und wir alle ausgegebenen Objekte in eigenen Variablen speichern wollen.

Unten definiere ich die Funktion random_coordinates(), welche zwei Zufallswerte zwischen 0 und 100 zurückgibt. Diese beiden Werte weise ich dann innerhalb einer Zeile den beiden Variablennamen x_pos und y_pos zu.

import random

def random_coordinates():
    random_x = random.randint(0,100)
    random_y = random.randint(0,100)
    return random_x, random_y         # Zwei Ausgabewerte

x_pos, y_pos = random_coordinates()   # Beide Ausgabewerte jeweils eigener Variable speichern
x_pos
34
y_pos
79

Ein weiteres Einsatzgebiet von Mehrfachzuweisungen ist das relativ unkomplizierte Entpacken von kleineren Listen und anderen Datencontainern. Haben wir rechts neben dem Gleichheitszeichen z.B. eine Liste mit drei Elementen stehen und links drei kommagetrennte Variablennamen, dann werden die drei Elemente aus der Liste heraus den drei Variablennamen zugeordnet:

wuschel, pünktchen, mimi  = ["hund", "katze", "maus"]
wuschel
'hund'
pünktchen
'katze'
mimi
'maus'

Das Ganze funktioniert auch, wenn Datencontainer von Funktionen zurückgegeben werden. Unten gibt die Funktion random_coordinates() die Werte innerhalb einer Liste zurück, wobei die Werte der Liste direkt per Mehrfachzuweisung “entpackt” werden:

def random_coordinates():
    random_x = random.randint(0,100)
    random_y = random.randint(0,100)
    return [random_x, random_y]       # Liste als Ausgabewert

x_pos, y_pos = random_coordinates()   # Ausgegebene Liste direkt entpacken
x_pos
72
y_pos
37

Genaugenommen entpackt die Mehrfachzuweisung eigentlich immer einen Datencontainer, auch wenn wie hier

x, y, z = 1, 2, 3

auf der rechten Seite die Objekte nur per Komma getrennt aufgereiht werden. Denn werden Objekte in der Form wie rechts neben dem Gleichheitszeichen hingeschrieben, erstellt Python ein sogenanntes Tupel. Das ist ähnlich, wie eine Liste, ein Datencontainer, in dem alle möglichen Objekte gespeichert werden können. Der Unterschied ist nur, dass nach der Erstellung eines Tupels dieses nicht mehr verändert, also kein Element ausgetauscht werden kann. Ein erstelltes Tupel erkennt man in Python an runden Klammern:

1, 2, 3
(1, 2, 3)

Das Tupel (1, 2, 3) kann auch direkt mit runden Klammern erstellt werden:

(1, 2, 3)
(1, 2, 3)

Da aber auch der Code 1, 2, 3 das Tupel (1, 2, 3) erstellt, entpackt der Code

x, y, z = 1, 2, 3

also genaugenommen das Tupel

(1, 2, 3)

und weist dessen Elemente jeweils einer Variable zu.