L’évaluation paresseuse, appelée aussi short-circuit evaluation, est une technique utilisée par les langages de programmation comme Python pour optimiser l'exécution des expressions logiques. Elle consiste à arrêter l'évaluation d'une expression logique dès qu'il n'est plus nécessaire de continuer, en fonction du résultat déjà déterminé.
L’évaluation paresseuse, appelée aussi short-circuit evaluation, est une technique utilisée par les langages de programmation comme Python pour optimiser l'exécution des expressions logiques. Elle consiste à arrêter l'évaluation d'une expression logique dès qu'il n'est plus nécessaire de continuer, en fonction du résultat déjà déterminé.
L’évaluation paresseuse repose sur les règles fondamentales des opérateurs logiques and et or :
Pour and :
False, le résultat final sera forcément False, peu importe les autres conditions restantes. Il est inutile de continuer l’évaluation.condition1 and condition2 and condition3
condition1 est False, Python s’arrête et ignore condition2 et condition3.Pour or :
True, le résultat final sera forcément True, peu importe les autres conditions restantes. Il est inutile de continuer l’évaluation.condition1 or condition2 or condition3
condition1 est True, Python s’arrête et ignore condition2 et condition3.Amélioration des performances :
Sécurité et gestion des erreurs :
a = 0
b = 5
if a != 0 and b / a > 1: # Python n'exécute pas b / a si a == 0
print("Condition remplie")
else:
print("Condition non remplie")
Teste ces exemples avec Thonny en mode debug, en exécutant ces codes pas à pas (F7). Tu verras effectivement que toutes les conditions ne sont pas testées.
andx = 5
y = 10
if x > 0 and y / x > 1:
print("Conditions valides")
else:
print("Au moins une condition est invalide")
x > 0 → Résultat : True.y / x > 1 → Résultat : True.True et l'instruction print("Conditions valides") est exécutée.Mais si x = 0 :
x > 0 → Résultat : False.y / x (prévenant une division par zéro).ordef test():
print("Fonction exécutée")
return True
if True or test():
print("Condition remplie")
True) est évaluée.test().Résultat :
Condition remplie
La phrase "Fonction exécutée" n’apparaît pas.
Un cas combinant des calculs et des protections contre des erreurs possibles.
a = 0
b = 10
if a != 0 and (b / a > 5 or b > 20):
print("Condition remplie")
else:
print("Condition non remplie")
a != 0. Si c’est False, il s’arrête immédiatement, sans risquer une division par zéro.Effets secondaires :
def modifier_variable():
global x
x = 10
return True
x = 0
if False and modifier_variable(): # modifier_variable() n'est jamais exécutée
print("Condition remplie")
print(x) # Résultat : x reste 0
Ordre des conditions :
L'évaluation paresseuse est une optimisation qui :
and et or, en respectant leurs comportements.Ce concept est particulièrement utile pour écrire du code efficace et sécurisé tout en minimisant les erreurs potentielles.