Vue d'ensemble
Une fonction range un morceau de code sous un nom, pour le réutiliser autant de
fois qu'on veut. Elle prend des paramètres (ses entrées) et peut
renvoyer une valeur (sa sortie). Bien distinguer return (renvoyer)
de print (afficher) est LE point qui débloque la programmation propre — et qui piège
beaucoup d'élèves à l'entrée en prépa.
return avec print.
Prérequis
- Variables, types et expressions
- Conditions et boucles (pour le corps des fonctions)
Tu confonds encore return et print ? C'est l'erreur la
plus fréquente en début de prépa, et elle fausse tout un DS. Nos mentors alumni X · Centrale · Mines
te font passer le cap une bonne fois pour toutes, sur tes propres exercices.
1. Définir et appeler une fonction
def nom(paramètres): définit une fonction. Le mot-clé return renvoie une
valeur à l'endroit de l'appel. Appeler nom(arguments) exécute le
corps et remplace l'appel par la valeur renvoyée.
def carre(x):
return x * x
y = carre(5) # y reçoit 25
print(carre(3)) # affiche 9def carre(x):Définition. On crée une fonction nommée carre avec un paramètre x (son entrée). Le code ci-dessous n'est PAS exécuté tout de suite : il attend un appel.return x * xValeur de retour. Quand la fonction est appelée, elle calcule x * x et renvoie ce résultat. return termine aussi la fonction.y = carre(5)Appel. On exécute carre avec x = 5 ; l'appel « vaut » 25, donc y reçoit 25.print(carre(3))Appel + affichage. carre(3) vaut 9, qu'on passe à print : affiche 9.2. return n'est pas print
return renvoie une valeur qu'on peut réutiliser (la ranger dans une
variable, la recalculer…). print ne fait qu'afficher à l'écran : il
ne renvoie rien d'exploitable.
def double_print(x):
print(x * 2) # affiche seulement
def double_return(x):
return x * 2 # renvoie une valeur réutilisable
a = double_print(3) # affiche 6, mais a vaut None
b = double_return(3) # b vaut 6 (rien n'est affiché)
print(b + 1) # affiche 7a = double_print(3)Piège. double_print affiche 6 mais ne renvoie rien : par défaut une fonction renvoie None. Donc a vaut None — inexploitable.b = double_return(3)Le bon réflexe. double_return renvoie 6 sans rien afficher. b vaut 6 et on peut le réutiliser : b + 1 donne 7.return renvoie None. Si tu écris
print(...) dans une fonction au lieu de return ..., tu ne pourras pas
réutiliser le résultat : toute réutilisation donnera None.
3. Variables locales (portée)
Une variable créée dans une fonction est locale : elle n'existe que pendant l'exécution de la fonction et est invisible à l'extérieur.
def f():
n = 10 # n est locale à f
return n
print(f()) # affiche 10
# print(n) # -> erreur : n n'existe pas en dehors de freturn. C'est plus sûr que
de dépendre de variables extérieures.
4. Exercices d'application
À faire de tête avant d'ouvrir le corrigé.
Écris une fonction cube(x) qui renvoie le cube de x.
Voir la correction détaillée
x à la puissance 3, soit x ** 3.def cube(x):
return x ** 3cube(2) renvoie 8. Bien utiliser return (et non print) pour pouvoir réutiliser le résultat.def ajoute(a, b):
return a + b
x = ajoute(2, 3)
print(x * 2)Voir la correction détaillée
ajoute(2, 3) renvoie 2 + 3 = 5, donc x vaut 5.print(x * 2) affiche 5 * 2 = 10.ajoute a bien pu être réutilisée grâce à return.Récap final — Ce qu'il faut absolument retenir
Tu dois pouvoir répondre « oui » sans hésiter à chaque point.
- Sais-tu définir une fonction avec
def, des paramètres et unreturn? - Sais-tu qu'un appel
f(...)« vaut » la valeur renvoyée et peut être rangé dans une variable ? - Sais-tu que
returnrenvoie (réutilisable) alors queprintne fait qu'afficher ? - Sais-tu qu'une fonction sans
returnrenvoieNone? - Sais-tu qu'une variable créée dans une fonction est locale (invisible dehors) ?