- Définir et appeler une fonction
- Différencier print et return
- Comprendre la portée des variables
Une fonction = une mini-machine nommée
Une fonction regroupe des instructions sous un nom. Tu lui donnes des paramètres (entrées), elle te renvoie un résultat (sortie). C’est l’outil principal pour ne pas se répéter et pour découper un gros problème en petits problèmes simples.
def carre(x):
return x * x
print(carre(5)) # 25
print(carre(1.5)) # 2.25
def salue(prenom, politesse="Bonjour"):
return politesse + " " + prenom + " !"
print(salue("Léo"))
print(salue("Inès", "Salut"))
def définit la fonction ; rien ne s’exécute avant l’appel (carre(5)). Un paramètre peut avoir une valeur par défaut.
print ou return ?
C’est LA confusion classique. print affiche une valeur pour l’humain. return renvoie une valeur au code qui a appelé la fonction, qui peut alors l’utiliser.
def double_print(x):
print(x * 2) # affiche, mais ne renvoie rien
def double_return(x):
return x * 2 # renvoie le résultat
a = double_print(4) # affiche 8
b = double_return(4) # n'affiche rien
print(a) # None : print ne renvoyait rien
print(b + 1) # 9 : on peut réutiliser la valeur
Décomposer pour mieux régner
Problème : « calculer la moyenne des notes supérieures ou égales à 10 ». Au lieu d’un bloc géant, on écrit trois petites fonctions qui font chacune une chose :
def moyenne(valeurs):
return sum(valeurs) / len(valeurs)
def garder_reussies(notes):
return [n for n in notes if n >= 10]
def moyenne_reussies(notes):
return moyenne(garder_reussies(notes))
print(moyenne_reussies([12, 8, 15, 9, 17, 11])) # 13.75
Chaque fonction se teste séparément. Quand un bug apparaît, tu sais où chercher.
La portée des variables
Une variable créée dans une fonction n’existe que pendant cet appel : elle est locale. Cela évite que deux fonctions s’écrasent mutuellement leurs variables.
def compte():
nombre = 10 # locale à la fonction
return nombre
compte()
print(nombre) # NameError : 'nombre' n'existe pas ici
Cette erreur est volontaire : lis le message, il te dit exactement ce qui ne va pas. Savoir lire un message d’erreur est une compétence essentielle.
Erreurs courantes
- Définir sans appeler :
def f(): …ne fait rien tant qu’on n’écrit pasf(). - Oublier
return: la fonction renvoie alorsNone. - Mettre du code après
return: il n’est jamais exécuté,returntermine la fonction. - Fonctions trop longues : si tu ne peux pas la résumer en une phrase, découpe-la.