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
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
nome, anni = ("Ada", 36)
nome # 'Ada'
anni # 36Cela fonctionne également sans parenthèses (c'est la virgule qui définit le tuple) :
x, y = 10, 20Et cela permet d'échanger des valeurs sans variable temporaire, un idiome pur de 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" :
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.
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
Étant donné `a = 1` et `b = 2`, échangez leurs valeurs sur une seule ligne (déballage de tuple) et évaluez le tuple (a, b).
Afficher l'indice
a, b = b, a
Solution disponible après 3 tentatives
Exercice de révision
À 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)`.
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
É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`.
Afficher l'indice
Utilisez x, y, z = point pour extraire les trois coordonnées en une seule instruction.
Solution disponible après 3 tentatives