Question 1Qu'affiche le code suivant ?items = [10, 20, 30]
if (n := len(items)) >= 2:
print(n)
L'opérateur morse := pour affecter et tester en une ligne
Apprends l'opérateur morse := de Python 3.8 pour affecter une variable et la tester dans une condition en une seule ligne.
L'opérateur morse := a été introduit en Python 3.8 pour te permettre d'affecter et de tester en une seule ligne. La forme := ressemble à des défenses de morse — d'où son nom. Il réduit le code répétitif quand la même valeur est réutilisée dans une condition if ou while.
Les bases de l'opérateur morse
Le = classique est une instruction et ne peut pas apparaître dans une expression — donc tu ne peux pas le mettre dans la condition d'un if ou d'un while. := est une expression, donc il peut aller directement à l'intérieur d'une condition.
Avec variable := expression, tu affectes le résultat à la variable et tu utilises cette même valeur comme valeur de la condition.
La colonne de gauche (normal) écrit l'affectation et le test sur des lignes séparées. La colonne de droite (morse) affecte et teste dans une seule condition.
# Style normal (deux lignes)
cart = ["pomme", "pain", "lait", "œufs"]
n = len(cart)
if n >= 3:
print(f"{n} articles : livraison gratuite")
# Version morse (une ligne : affecte + teste)
if (n := len(cart)) >= 3:
print(f"{n} articles : livraison gratuite")
# Sortie : 4 articles : livraison gratuite
Entoure-le de parenthèses dans une condition
if n := len(cart) >= 3: sans parenthèses évalue d'abord len(cart) >= 3 et affecte True/False à n. L'idiome correct est (n := len(cart)) >= 3 — entoure l'affectation de parenthèses.
Utiliser l'opérateur morse avec if
Un motif courant avec if est d'avoir besoin de la valeur testée aussi à l'intérieur du corps. Normalement tu sépares « affecter, puis tester » sur deux lignes, mais l'opérateur morse te permet de l'écrire une seule fois, juste là où la valeur est utilisée.
# Branche sur le nombre de résultats de recherche, puis l'utilise dans le corps
search_results = ["Livre A", "Livre B", "Livre C", "Livre D", "Livre E"]
if (hit_count := len(search_results)) >= 3:
print(f"{hit_count} résultats trouvés")
else:
print("Trop peu de résultats")
# Sortie : 5 résultats trouvés
Utiliser l'opérateur morse avec while
Dans while, le morse brille quand tu veux que la valeur extraite serve à la fois de condition et de quelque chose que tu utilises dans le corps.
Chaque itération vérifie d'abord si la queue est vide. Si oui, l'évaluation en court-circuit saute pop() et sort de la boucle. Sinon queue.pop(0) prend la tête et l'affecte à task, et le corps s'exécute avec task avant de reboucler.
# Vider une queue un élément à la fois depuis la tête
pending_jobs = ["envoyer e-mail", "sauvegarde", "déploiement"]
while pending_jobs and (job := pending_jobs.pop(0)):
print(f"traitement : {job}")
# traitement : envoyer e-mail / traitement : sauvegarde / traitement : déploiement
# Dès que pending_jobs devient vide, la partie gauche est évaluée à False et pop() est sauté — la boucle se termine.
pending_jobs and (job := pending_jobs.pop(0)) sort de la boucle via l'évaluation en court-circuit dès que la partie gauche est vide (False). Ça évite le bug d'appeler pop() sur une liste vide et de déclencher IndexError.
Quand l'utiliser et quand ne pas l'utiliser
L'opérateur morse n'ajoute aucune capacité au-delà d'économiser des frappes. Écrire la logique en une ligne est pratique, mais ça peut aussi nuire à la lisibilité, donc sois sélectif sur quand y recourir.
| Situation | Recommandation | Pourquoi |
|---|---|---|
| Réutiliser la valeur testée dans le corps | À utiliser | Séparer sur deux lignes éloigne la variable de l'endroit où elle est utilisée |
| Dans while, utiliser la valeur extraite à la fois comme condition et dans le corps | À utiliser | Combine la condition de sortie de boucle avec l'extraction |
| Calcul complexe ou effets de bord dans la condition | À éviter | Cacher du travail dans une expression rend le flux difficile à suivre |
| Simple affectation sans condition | Ne pas utiliser | Le `=` simple est plus simple et plus facile à lire |
Dans cet article, tu as appris à utiliser l'opérateur morse := pour combiner affectation et test en une seule expression.
Vérification des connaissances
Répondez à chaque question une par une.
Question 2Quelle est la bonne façon d'utiliser l'opérateur morse dans une condition if ?
Question 3Quelle affirmation décrit le mieux l'opérateur morse := ?