Explication de la leçon
À la fin de cette leçon, tu seras capable de :
(number, record) lors d'une itération.En Python, le décompactage affecte les éléments d'une séquence à plusieurs variables à la fois :
service, region = ("api", "eu")Le nombre de cibles doit correspondre au nombre d'éléments, à moins qu'une cible ne soit précédée d'une étoile. Une étoile rassemble les éléments restants dans une liste :
first, *middle, last = [2, 4, 6, 8]Ici, middle vaut [4, 6]. Elle peut aussi être vide lorsque l'entrée ne contient que deux éléments. Une seule cible étoilée est autorisée dans une affectation par décompactage.
L'affectation multiple rend également l'échange très simple : a, b = b, a évalue le côté droit avant d'affecter les noms.
Le décompactage fonctionne naturellement avec les boucles for : for name, score in pairs: donne des noms utiles aux deux parties de chaque paire. Tu peux aussi décompacter une paire à l'intérieur de enumerate() en utilisant for number, (name, score) in enumerate(pairs, start=1):. C'est idéal lorsque l'enregistrement lui-même contient plusieurs champs mais que tu as également besoin de sa position.
host, port = ("db.internal", 5432)
print(f"Connect: {host}:{port}")Sortie :
Connect: db.internal:5432Les deux éléments du tuple sont affectés aux deux noms, dans l'ordre.
front = "blue"
back = "orange"
front, back = back, front
print(f"Front: {front}, back: {back}")Sortie :
Front: orange, back: blueLes deux anciennes valeurs sont capturées avant qu'aucun nom ne change.
measurements = [10, 12, 14, 16, 20]
first, *middle, last = measurements
print(first)
print(middle)
print(last)Sortie :
10
[12, 14, 16]
20La cible étoilée reçoit toujours une liste, même lorsqu'elle ne contient aucune valeur.
checks = [("lint", True), ("tests", False)]
for number, (name, passed) in enumerate(checks, start=1):
print(f"{number}. {name}: {passed}")Sortie :
1. lint: True
2. tests: FalseLa paire externe contient (number, record) ; la paire interne décompose l'enregistrement en (name, passed).
| Objectif | Python |
|---|---|
| Décompacter deux entrées | left, right = pair |
| Échanger des noms | left, right = right, left |
| Capturer les entrées intermédiaires | first, *middle, last = values |
| Décompacter chaque paire | for key, value in pairs: |
| Numéroter et décompacter des paires | for n, (key, value) in enumerate(pairs, 1): |
ValueError.enumerate(pairs) renvoie (index, pair), et non trois valeurs distinctes.