W3docs

Assigner plusieurs valeurs

Apprenez à assigner plusieurs valeurs en Python : déballage de tuple, même valeur à plusieurs variables, assignation étoilée et erreurs courantes avec des exemples.

Assigner plusieurs valeurs en Python

Python vous permet d'assigner des valeurs à plusieurs variables dans une seule instruction. Cela couvre quatre modèles courants que vous rencontrerez dans du code réel :

  1. Assignation multiple — des valeurs différentes à des variables différentes en une ligne.
  2. Assignation chaînée — la même valeur à plusieurs variables à la fois.
  3. Déballage d'itérable — extraire des éléments d'une liste, d'un tuple ou de tout itérable.
  4. Assignation étoilée — collecter un « reste » de longueur variable dans une liste.

Chaque modèle est expliqué ci-dessous avec des exemples exécutables et les erreurs à surveiller.

Assignation multiple (déballage de tuple)

La forme la plus courante utilise une liste de noms séparés par des virgules à gauche et une liste de valeurs correspondante à droite :

variable1, variable2, variable3 = value1, value2, value3

Python regroupe le côté droit dans un tuple temporaire, puis le déballe dans les noms à gauche, de gauche à droite. Le nombre de noms et de valeurs doit correspondre exactement ; sinon, Python lève une ValueError.

Assigner trois variables de types différents en une ligne :

python— editable, runs on the server

Résultat :

Python
3.7
True

C'est équivalent à écrire trois instructions d'assignation séparées, mais c'est plus concis et rend la relation entre les noms évidente d'un coup d'œil.

Échanger des variables

Comme Python évalue l'intégralité du côté droit avant toute assignation, vous pouvez échanger deux variables sans variable temporaire :

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)

Résultat :

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

Dans la plupart des autres langages, cet échange nécessite une troisième variable temporaire. La sémantique de paquetage de tuples de Python rend cette ligne unique sûre.

ValueError : nombre incorrect de valeurs

Si le nombre de valeurs ne correspond pas au nombre de noms, Python lève immédiatement une ValueError :

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)

Lorsque vous voyez cette erreur, comptez les noms à gauche et les valeurs à droite — ils doivent être égaux, ou vous avez besoin d'une assignation étoilée (voir ci-dessous).

Assignation chaînée (une valeur, plusieurs variables)

Pour donner à plusieurs variables la même valeur initiale, chaînez les opérateurs d'assignation :

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

Résultat :

0 0 0

Python évalue 0 une seule fois et lie les trois noms au même objet. Cela fonctionne correctement pour les objets immuables (entiers, string, tuples). Attention aux valeurs mutables par défaut — les trois noms pointent vers le même objet liste :

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

Si vous avez besoin de listes indépendantes, utilisez une compréhension de liste ou des assignations séparées :

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

Déballage d'un itérable

Vous pouvez déballer n'importe quel itérable — une liste, un tuple, une string, un range ou autre — directement dans des variables :

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

Résultat :

10 20 30

C'est le même mécanisme que l'assignation multiple ; Python ne distingue pas si le côté droit est un tuple littéral ou une variable liste. Par exemple, déballer un tuple fonctionne de manière identique :

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

Consultez le chapitre Déballer des tuples pour une étude approfondie de ce modèle.

Assignation étoilée (déballage étendu)

Lorsque vous ne savez pas combien d'éléments contient un itérable, préfixez un nom avec * pour collecter les éléments restants dans une liste :

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

Le nom étoilé peut apparaître n'importe où dans la liste cible — au début, au milieu ou à la fin :

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

Règles pour l'assignation étoilée :

  • Seul un nom étoilé est autorisé par instruction.
  • Le nom étoilé collecte toujours une list, même s'il correspond à zéro ou un élément.
  • Tous les noms non étoilés doivent correspondre exactement à un élément.

Quand utiliser chaque modèle

ModèleCas d'utilisation typique
a, b = 1, 2Retourner plusieurs valeurs depuis une fonction ; échanger deux variables
x = y = z = 0Initialiser un groupe de compteurs ou d'indicateurs à la même valeur
a, b, c = my_listDéballer une séquence de longueur fixe dans des noms significatifs
first, *rest = itemsSéparer la tête de la queue dans une liste de longueur inconnue

Sujets connexes

Pratique

Pratique
Which of the following are valid ways to assign multiple values in Python?
Which of the following are valid ways to assign multiple values in Python?
Was this page helpful?