Définir une fonction : def
Une fonction est un bloc de code réutilisable qui effectue une tâche précise. Elle peut prendre des arguments en entrée et renvoyer un résultat à l'aide du mot-clé return.
def nom_de_la_fonction(parametres):
"""documentation facultative (docstring)"""
# instructions
return valeur # optionnel
L'indentation délimite le corps de la fonction. Le return renvoie immédiatement une valeur et termine l'exécution de la fonction. Si aucun return n'est présent, la fonction renvoie None.
def carre(x):
return x**2
print(carre(5)) # 25
Paramètres et valeurs de retour
Passage de paramètres
Une fonction peut avoir zéro, un ou plusieurs paramètres. Lors de l'appel, on fournit des arguments (valeurs) qui sont copiés dans les paramètres.
def aire_rectangle(longueur, largeur):
return longueur * largeur
print(aire_rectangle(5, 3)) # 15
L'instruction return
return permet de renvoyer une valeur. On peut placer plusieurs return dans une même fonction (par exemple à l'intérieur de conditions). Dès qu'un return est atteint, la fonction s'arrête.
def valeur_absolue(x):
if x >= 0:
return x
else:
return -x
print affiche à l'écran mais ne renvoie rien (None). return renvoie une valeur utilisable dans un calcul ou une variable.
Portée des variables (locale / globale)
La notion de portée détermine où une variable est accessible.
Variable globale : Une variable définie en dehors de toute fonction est globale : elle est visible partout, mais une fonction ne peut pas la modifier directement (sauf déclaration explicite avec
global, à éviter en général).
x = 10 # variable globale
def modifie():
x = 5 # variable locale, masque la globale
print("dans la fonction:", x)
modifie() # affiche 5
print("hors fonction:", x) # affiche 10
return. Cela évite les effets de bord et rend le code plus lisible.
Applications aux mathématiques
Les fonctions Python sont parfaitement adaptées pour implémenter des formules mathématiques. Voici quelques exemples classiques du programme de Première.
Polynôme du second degré
def second_degre(a, b, c):
delta = b**2 - 4*a*c
if delta < 0:
return None
elif delta == 0:
return -b / (2*a)
else:
x1 = (-b - delta**0.5) / (2*a)
x2 = (-b + delta**0.5) / (2*a)
return (x1, x2)
print(second_degre(1, -3, 2)) # (1.0, 2.0)
print(second_degre(1, 1, 1)) # None
Somme des termes d'une suite arithmétique
def somme_entiers(n):
return n * (n + 1) // 2
print(somme_entiers(100)) # 5050
Suite géométrique : somme des premiers termes
def somme_geo(u0, q, n):
"""somme de u0 + u0*q + ... + u0*q**(n-1)"""
if q == 1:
return n * u0
else:
return u0 * (1 - q**n) / (1 - q)
Exercices corrigés
Exercice 1 – Factorielle
Écrire une fonction factorielle(n) qui calcule $n! = 1 \times 2 \times \dots \times n$ (pour $n \ge 0$, avec $0! = 1$).
Solution :
def factorielle(n):
resultat = 1
for i in range(2, n+1):
resultat *= i
return resultat
print(factorielle(5)) # 120
Exercice 2 – Fonction booléenne : année bissextile
Écrire une fonction est_bissextile(annee) qui renvoie True si l'année est bissextile, False sinon.
Solution :
def est_bissextile(annee):
if annee % 400 == 0:
return True
if annee % 100 == 0:
return False
if annee % 4 == 0:
return True
return False
Exercice 3 – Calcul du $n$-ème terme d'une suite récurrente
On définit $u_{n+1} = 0.5 u_n + 2$ avec $u_0 = 10$. Écrire une fonction terme(n) qui renvoie $u_n$.
Solution :
def terme(n):
u = 10
for _ in range(n):
u = 0.5 * u + 2
return u
print(terme(5)) # u_5
Exercice 4 – Fonction de conversion (radians/degrés)
Écrire une fonction rad(deg) qui convertit un angle en degrés en radians, et une fonction deg(rad) qui fait l'inverse.
Solution :
from math import pi
def rad(deg):
return deg * pi / 180
def deg(rad):
return rad * 180 / pi