Adloun

L'évaluation paresseuse

Exercice supplémentaire · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 3 — Instructions conditionnelles · Construire une condition

Énoncé

Exécuter ces deux lignes et expliquer pourquoi la première ne provoque aucune erreur alors que la seconde en provoque une :

n = 0
print(n != 0 and 10 / n > 1)
print(10 / n > 1 and n != 0)

Corrigé

La première affiche False, la seconde lève une ZeroDivisionError.

Python évalue un and de gauche à droite et s'arrête dès qu'il peut conclure : la première condition n != 0 étant fausse, le résultat est déjà False et la division n'est jamais calculée. C'est l'évaluation paresseuse.

Dans le second ordre, la division est évaluée en premier et échoue.

Conséquence pratique importante : on place toujours en premier le test qui protège les suivants — vérifier qu'un dénominateur n'est pas nul, qu'une liste n'est pas vide, avant de s'en servir. Le comportement analogue existe pour or : si le premier membre est vrai, le second n'est pas évalué.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.