W3docs

Mehrere Werte zuweisen

Mehrere Werte in Python zuweisen: Tuple-Unpacking, ein Wert an viele Variablen, Stern-Zuweisung und häufige Fallstricke mit Beispielen.

Mehrere Werte in Python zuweisen

Python ermöglicht es, in einer einzigen Anweisung Werte an mehrere Variablen zuzuweisen. Im Folgenden werden vier häufige Muster vorgestellt, die im echten Code vorkommen:

  1. Mehrfachzuweisung — verschiedene Werte an verschiedene Variablen in einer Zeile.
  2. Verkettete Zuweisung — denselben Wert gleichzeitig an mehrere Variablen.
  3. Iterable-Unpacking — Elemente aus einer Liste, einem Tuple oder einem anderen Iterable entnehmen.
  4. Stern-Zuweisung — einen variabel langen „Rest" in einer Liste sammeln.

Jedes Muster wird unten mit ausführbaren Beispielen und den zu beachtenden Fehlern erklärt.

Mehrfachzuweisung (Tuple-Unpacking)

Die gebräuchlichste Form verwendet eine kommagetrennte Liste von Namen auf der linken Seite und eine passende Liste von Werten auf der rechten Seite:

variable1, variable2, variable3 = value1, value2, value3

Python verpackt die rechte Seite in ein temporäres Tuple und entpackt es dann von links nach rechts in die Namen auf der linken Seite. Die Anzahl der Namen und Werte muss genau übereinstimmen; andernfalls löst Python einen ValueError aus.

Drei Variablen unterschiedlicher Typen in einer Zeile zuweisen:

python— editable, runs on the server

Ausgabe:

Python
3.7
True

Dies entspricht dem Schreiben von drei separaten Zuweisungsanweisungen, ist jedoch kompakter und macht die Beziehung zwischen den Namen auf einen Blick deutlich.

Variablen tauschen

Da Python die gesamte rechte Seite auswertet, bevor eine Zuweisung stattfindet, können zwei Variablen ohne eine temporäre Variable getauscht werden:

x = 5
y = 10

# Before swapping
print("Before swapping")
print("x =", x)
print("y =", y)

# Swap in one line — no temp variable needed
x, y = y, x

# After swapping
print("After swapping")
print("x =", x)
print("y =", y)

Ausgabe:

Before swapping
x = 5
y = 10
After swapping
x = 10
y = 5

In den meisten anderen Sprachen erfordert dieser Tausch eine dritte temporäre Variable. Pythons Tuple-Packing-Semantik macht die Einzeiler-Variante sicher.

ValueError: Anzahl stimmt nicht überein

Wenn die Anzahl der Werte nicht mit der Anzahl der Namen übereinstimmt, löst Python sofort einen ValueError aus:

a, b = 1, 2, 3        # too many values
# ValueError: too many values to unpack (expected 2)

a, b, c = 1, 2        # too few values
# ValueError: not enough values to unpack (expected 3, got 2)

Wenn dieser Fehler auftritt, zähle die Namen auf der linken und die Werte auf der rechten Seite — sie müssen gleich sein, oder du benötigst eine Stern-Zuweisung (siehe unten).

Verkettete Zuweisung (ein Wert, viele Variablen)

Um mehreren Variablen denselben Anfangswert zu geben, verkettet man die Zuweisungsoperatoren:

x = y = z = 0
print(x, y, z)

Ausgabe:

0 0 0

Python wertet 0 einmal aus und bindet alle drei Namen an dasselbe Objekt. Dies funktioniert korrekt für unveränderliche Objekte (Ganzzahlen, Strings, Tuples). Vorsicht bei veränderbaren Standardwerten — alle drei Namen zeigen auf dasselbe Listenobjekt:

# Pitfall: shared mutable object
a = b = c = []
a.append(1)
print(b)   # [1]  — b is the same list, not a copy!

Wenn unabhängige Listen benötigt werden, verwende ein List-Comprehension oder separate Zuweisungen:

a, b, c = [], [], []

Ein Iterable entpacken

Jedes Iterable — eine Liste, ein Tuple, ein string, ein range oder ein anderes — kann direkt in Variablen entpackt werden:

a, b, c = [10, 20, 30]
print(a, b, c)

Ausgabe:

10 20 30

Dies ist derselbe Mechanismus wie bei der Mehrfachzuweisung; Python unterscheidet nicht, ob die rechte Seite ein wörtliches Tuple oder eine Listenvariable ist. Das Entpacken eines Tuple funktioniert beispielsweise identisch:

coords = (51.5, -0.1)
lat, lon = coords
print(lat)   # 51.5
print(lon)   # -0.1

Im Kapitel Tuples entpacken wird dieses Muster ausführlicher behandelt.

Stern-Zuweisung (erweitertes Unpacking)

Wenn die Anzahl der Elemente in einem Iterable unbekannt ist, kann einem Namen das Präfix * vorangestellt werden, um die verbleibenden Elemente in einer Liste zu sammeln:

first, *rest = [10, 20, 30, 40]
print(first)   # 10
print(rest)    # [20, 30, 40]

Der mit Stern versehene Name kann an beliebiger Stelle in der Zielliste stehen — am Anfang, in der Mitte oder am Ende:

first, *middle, last = [10, 20, 30, 40]
print(first)    # 10
print(middle)   # [20, 30]
print(last)     # 40
*head, second_last, last = range(1, 6)
print(head)         # [1, 2, 3]
print(second_last)  # 4
print(last)         # 5

Regeln für die Stern-Zuweisung:

  • Pro Anweisung ist nur ein mit Stern versehener Name erlaubt.
  • Der mit Stern versehene Name sammelt immer eine list, auch wenn null oder ein Element übereinstimmt.
  • Alle Namen ohne Stern müssen genau einem Element entsprechen.

Wann welches Muster verwenden

MusterTypischer Anwendungsfall
a, b = 1, 2Mehrere Werte aus einer Funktion zurückgeben; zwei Variablen tauschen
x = y = z = 0Eine Gruppe von Zählern oder Flags mit demselben Wert initialisieren
a, b, c = my_listEine Sequenz fester Länge in aussagekräftige Namen entpacken
first, *rest = itemsKopf von Schwanz in einer Liste unbekannter Länge trennen

Verwandte Themen

Übung

Übung
Welche der folgenden Möglichkeiten sind gültige Wege, um in Python mehrere Werte zuzuweisen?
Welche der folgenden Möglichkeiten sind gültige Wege, um in Python mehrere Werte zuzuweisen?
Was this page helpful?