Ce qu'une fonction ne voit pas
Exercice de TD · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 5 — Les fonctions · Définir et appeler une fonction
Énoncé
Prédire l'affichage de ce programme, puis l'exécuter.
x = 10
def ajoute_cinq(x):
x = x + 5
return x
print(ajoute_cinq(x))
print(x)
Que se passe-t-il si l'on supprime le paramètre, en écrivant def ajoute_cinq(): puis return x + 5 ?
Corrigé
L'affichage est 15 puis 10.
Le x de la fonction est une variable locale : elle naît à l'appel, reçoit une copie de la valeur passée, vit le temps de la fonction, puis disparaît. Le x extérieur — dit global — n'est pas touché. Que les deux portent le même nom ne les relie en rien.
Sans paramètre, return x + 5 fonctionne aussi et renvoie 15 : faute de variable locale, Python va chercher le x global. Mais c'est une mauvaise pratique, pour deux raisons : la fonction devient inutilisable ailleurs, puisqu'elle exige qu'un x existe au dehors ; et son résultat dépend d'un état invisible dans sa signature, ce qui rend les erreurs très difficiles à localiser.
Une fonction doit recevoir par ses paramètres tout ce dont elle a besoin, et communiquer son résultat par return. C'est ce qui permet de la lire et de la tester isolément.
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.