Apprenez en lisant dans l'ordre

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.

Affectation normale vs. opérateur morse
n = len(cart)if (n := len(cart))if n >= 3:évalue >= 3exécute le corpsexécute le corpsTrueaffecte + litTrue

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

Utilise l'opérateur morse pour vérifier le total d'un panier d'achat.

① Définis cart_prices = [1200, 800, 3500, 600] (le prix de chaque article).

② Dans la condition if, écris (total := sum(cart_prices)) >= 5000. Quand le total est de 5000 ou plus, affiche "{total} yen : livraison gratuite" ; sinon affiche "{total} yen : {5000 - total} yen de plus pour la livraison gratuite".

③ Après le bloc if, appelle print(total) pour confirmer que le même total reste accessible en dehors.

(L'explication apparaît une fois que tu auras exécuté le code correctement.)

Éditeur Python

Exécuter le code pour voir le résultat

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.

while queue et (task := queue.pop(0))
la boucle while démarrequeue vide ?task := queue.pop(0)sortie boucle(terminé)utilise task dans corpsprochaine itérationnon videvide (False)task obtenu

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.

Affiche une liste de candidats de recherche un par un depuis le début.

① Définis candidates = ["Alice Martin", "Léa Dupont", "Chloé Bernard"].

② Utilise while candidates and (name := candidates.pop(0)): pour en retirer un par le début et afficher "Candidat : {name}".

③ Après la boucle, affiche "Tous les candidats vérifiés".

Éditeur Python

Exécuter le code pour voir le résultat

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.

SituationRecommandationPourquoi
Réutiliser la valeur testée dans le corpsÀ utiliserSé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À utiliserCombine la condition de sortie de boucle avec l'extraction
Calcul complexe ou effets de bord dans la conditionÀ éviterCacher du travail dans une expression rend le flux difficile à suivre
Simple affectation sans conditionNe pas utiliserLe `=` 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.

QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Qu'affiche le code suivant ?
items = [10, 20, 30]
if (n := len(items)) >= 2:
print(n)

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 := ?