Passer au contenu principal
eLearner.app
Module 3 · Leçon 2 sur 410/36 dans le cours~10 min
Leçons du module (2/4)

Tuples et unpacking

Un tuple est une séquence ordonnée et immuable : une fois créé, vous ne pouvez plus modifier ses éléments. Il s'écrit avec des parenthèses (même si ce qui le définit réellement est la virgule).

Créer un tuple

Python
vuota = ()
una = (42,)             # ATTENTION : sans virgule, (42) est juste 42 entre parenthèses
coords = (10, 20)
mista = ("Ada", 36, True)

L'accès par index et le slicing fonctionnent exactement de la même manière que pour les listes : coords[0], coords[-1], mista[:2].

Quand utiliser un tuple plutôt qu'une liste

  • Lorsque la valeur représente une collection fixe qui ne doit pas changer (coordonnées, une date sous la forme (année, mois, jour), une version (1, 2, 3)).
  • Lorsque vous devez utiliser la valeur comme clé de dictionnaire ou comme élément d'un set : seuls les objets immuables (hashables) peuvent être utilisés.
  • Lorsque vous souhaitez signaler au lecteur du code que cette valeur est "gelée".

Déballage (unpacking) : la fonctionnalité qui change votre façon d'écrire du Python

Python
nome, anni = ("Ada", 36)
nome   # 'Ada'
anni   # 36

Cela fonctionne également sans parenthèses (c'est la virgule qui définit le tuple) :

Python
x, y = 10, 20

Et cela permet d'échanger des valeurs sans variable temporaire, un idiome pur de Python :

Python
a, b = 1, 2
a, b = b, a
a, b   # (2, 1)

Déballage avec * (le reste)

Lorsque vous souhaitez capturer "le premier et le reste" ou "le premier, le dernier et le milieu" :

Python
primo, *resto = [1, 2, 3, 4, 5]
primo   # 1
resto   # [2, 3, 4, 5]

primo, *centro, ultimo = [1, 2, 3, 4, 5]
centro  # [2, 3, 4]

C'est ce qu'on appelle une affectation avec astérisque (starred assignment) : l'étoile rassemble tout ce qui reste dans une liste.

Le piège du tuple à un seul élément

(42) n'est pas un tuple, c'est le nombre 42 entre parenthèses. Pour faire un tuple à un seul élément, il faut la virgule : (42,). Sans elle, toute opération échouera de manière confuse.

Python
x = (42)
type(x)   # <class 'int'>
x = (42,)
type(x)   # <class 'tuple'>

Tuples à un seul élément

Pour créer un tuple contenant un seul élément, les parenthèses seules ne suffisent pas : vous devez insérer une virgule finale, par exemple t = (42,). Sans la virgule, Python traite les parenthèses comme un simple regroupement mathématique, créant un simple entier 42.

À vous de jouer

Exercice#python.m3.l2.e1
Tentatives : 0Chargement…

Étant donné `a = 1` et `b = 2`, échangez leurs valeurs sur une seule ligne (déballage de tuple) et évaluez le tuple (a, b).

Chargement de l'éditeur…
Afficher l'indice

a, b = b, a

Solution disponible après 3 tentatives

Exercice de révision

Exercice#python.m3.l2.e2
Tentatives : 0Chargement…

À partir de la liste `voti = [7, 5, 8, 6, 9]`, utilisez le déballage pour extraire la première note dans `primo`, la dernière dans `ultimo` et les notes restantes dans `centro`. Évaluez `(primo, centro, ultimo)`.

Chargement de l'éditeur…
Afficher l'indice

primo, *centro, ultimo = voti → primo=7, centro=[5,8,6], ultimo=9.

Solution disponible après 3 tentatives

Défi supplémentaire

Exercice#python.m3.l2.e3
Tentatives : 0Chargement…

Étant donné le tuple `point = (4, 5, 6)`, utilisez le déballage pour affecter les trois valeurs aux variables `x`, `y`, `z` respectivement. Ensuite, calculez la somme de `x`, `y` et `z` et stockez-la dans `coord_sum`. Enfin, évaluez `coord_sum`.

Chargement de l'éditeur…
Afficher l'indice

Utilisez x, y, z = point pour extraire les trois coordonnées en une seule instruction.

Solution disponible après 3 tentatives