dans cette leçon, vous allez apprendre à créer des fonctions pour organiser votre code, éviter les répétitions et rendre vos programmes plus faciles à lire et à maintenir.
objectifs
- définir une fonction avec
def nom(...): - renvoyer une valeur avec
return - comprendre la différence entre exécuter et appeler une fonction
- utiliser la portée locale pour les variables
- appliquer de bonnes pratiques de nommage
pourquoi des fonctions ?
- éviter la duplication de code
- isoler des parties logiques pour mieux tester et réutiliser
- améliorer la lisibilité et la maintenance
définir une fonction
def dire_bonjour():
print("bonjour !")
appel :
dire_bonjour()
paramètres et arguments
def saluer(nom):
print(f"bonjour {nom}")
appel avec argument :
saluer("ana")
plusieurs paramètres :
def addition(a, b):
print(a + b)
addition(2, 3)
return : renvoyer une valeur
def somme(a, b):
return a + b
resultat = somme(2, 3)
print(resultat)
return termine la fonction immédiatement.
sans return, la fonction renvoie None :
def rien():
pass
print(rien()) # None
portée locale
les variables définies dans une fonction sont locales à celle-ci.
def foo():
x = 10 # locale
print(x)
foo()
# print(x) -> NameError
une fonction peut lire une variable globale, mais ne peut pas la modifier sans global (à éviter pour garder le code clair).
valeurs de retour multiples
python peut retourner plusieurs valeurs sous forme de tuple.
def stats(a, b):
return a + b, a * b
somme, produit = stats(3, 4)
docstring et aide
def aire_rectangle(largeur, hauteur):
"""calcule l'aire d'un rectangle."""
return largeur * hauteur
help(aire_rectangle)
bonnes pratiques
- noms explicites (
calcul_ttc, pasct) - une fonction = une seule responsabilité
- éviter les effets de bord imprévus (modifier une variable externe)
- documenter avec une docstring claire
mini exemples exécutables
# aire d'un cercle
import math
def aire_cercle(rayon):
"""retourne l'aire d'un cercle de rayon r."""
return math.pi * rayon ** 2
print(aire_cercle(2))
# formateur de message
def format_msg(nom, score):
return f"{nom} a {score} points"
print(format_msg("alex", 42))
# min et max dans une liste
def min_max(seq):
return min(seq), max(seq)
low, high = min_max([5, 1, 9])
print(low, high)
pièges courants
- oublier d’appeler la fonction (
print(foo)au lieu deprint(foo())) - oublier
returnquand on veut renvoyer un résultat - réutiliser un nom de fonction comme variable
- dépendre de variables globales
exercices
carre(n)→ renvoie le carré den.hello(name)→ retourne"bonjour <name>"(ne pas juste imprimer).perimetre_rectangle(l, h)→ retourne le périmètre.convert_km_miles(km)→ retourne la distance en miles (1 km = 0.621371 mi).split_amount(total, people)→ retourne le montant par personne, gérerpeople = 0en retournantNone.