Adloun

Une fonction sans effet de bord

Exercice supplémentaire · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 5 — Les fonctions · Définir et appeler une fonction

Énoncé

Expliquer la différence de comportement des deux fonctions ci-dessous, sachant que compteur est défini à l'extérieur. Laquelle est préférable, et pourquoi ?

compteur = 0

def incremente_A():
    global compteur
    compteur = compteur + 1
    return compteur

def incremente_B(c):
    return c + 1

Corrigé

incremente_A modifie une variable extérieure : deux appels successifs renvoient puis . Le mot-clef global autorise cette écriture, sans laquelle Python créerait une variable locale.

incremente_B ne modifie rien : appelée deux fois avec le même argument, elle renvoie deux fois la même chose.

La seconde est très préférable, pour des raisons qui se vérifient toutes en pratique :

On appelle effet de bord toute modification de l'état extérieur. On ne les proscrit pas — un print en est un — mais on les cantonne, et l'on évite qu'une fonction de calcul en ait.

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.