Les fonctions en Python

À mesure que les programmes deviennent plus longs, il devient difficile de tout écrire dans un seul bloc. Pour garder ton code clair, organisé et réutilisable, Python permet de regrouper des instructions dans des fonctions. Elles permettent de découper un programme complexe en petites parties indépendantes, chacune dédiée à une tâche précise.

Une fonction est un morceau de programme qui effectue une tâche spécifique. Elle permet d’éviter les répétitions, de mieux structurer ton code et de faciliter la maintenance. C’est une notion essentielle pour tout programmeur, car elle favorise la lisibilité et la collaboration dans des projets plus vastes. En Python, les fonctions peuvent recevoir des paramètres, renvoyer des résultats et être réutilisées autant de fois que nécessaire.

Objectifs pédagogiques

  • Comprendre le rôle et la structure d’une fonction en Python.
  • Créer, appeler et utiliser des fonctions avec ou sans paramètres.
  • Faire retourner une valeur à une fonction à l’aide de return.
  • Différencier variables locales et globales.
  • Appliquer les bonnes pratiques de nommage et de documentation.

Qu’est-ce qu’une fonction ?

Définition
Une fonction est un bloc d’instructions portant un nom, qui peut recevoir des données en entrée (appelées paramètres) et renvoyer un résultat (appelé valeur de retour). Elle s’écrit à l’aide du mot-clé def, suivi du nom de la fonction, de parenthèses, puis de deux-points. Le code qui compose la fonction doit être indenté, comme pour les conditions ou les boucles.

Exemple

def saluer():
    print("Bonjour à tous !")

saluer()

Une fois la fonction définie, on peut l’appeler à tout moment dans le programme simplement en écrivant son nom suivi de parenthèses. C’est un moyen pratique de réutiliser du code sans le recopier plusieurs fois.

Structure d’une fonction

def nom_de_la_fonction(parametres):
    # instructions
    return valeur

Les différents éléments sont :

Une fonction en Python est plus simple à écrire qu’en C ou C++ : il n’est pas nécessaire d’indiquer le type de retour (comme int, void, float…), ni celui des paramètres. Python détermine automatiquement le type des valeurs utilisées, ce qui rend le code plus concis et lisible. De plus, les blocs ne sont pas délimités par des accolades { } comme en C/C++, mais par l’indentation, ce qui favorise une mise en forme claire et cohérente.

Le mot-clé return fonctionne de la même manière qu’en C : il permet de renvoyer une valeur et d’interrompre l’exécution de la fonction. Si return est omis, la fonction renvoie implicitement None, équivalent d’un “rien” en Python.

Exemple avec paramètres - Bonjour personnalisé

def dire_bonjour(nom):
    print(f"Bonjour {nom} !")

dire_bonjour("Alice")
dire_bonjour("Bob")

Ici, le paramètre nom joue le même rôle qu’un argument de fonction en C/C++, mais il n’a pas besoin d’être typé.

La valeur de retour

Une fonction peut renvoyer une valeur grâce au mot-clé return. C’est ce qui permet à la fonction de produire un résultat que l’on peut réutiliser ailleurs dans le programme.

def addition(a, b):
    resultat = a + b
    return resultat

somme = addition(5, 7)
print("Résultat :", somme)

Comme en C ou C++, le mot-clé return interrompt l’exécution de la fonction et renvoie la valeur indiquée. Cependant, la différence majeure avec le C/C++ est qu’il n’est pas nécessaire de préciser le type de retour : Python le déduit automatiquement.

Une même fonction peut donc renvoyer un entier, un flottant, une chaîne ou même une liste, selon le contexte. Si aucune instruction return n’est utilisée, la fonction renvoie automatiquement None, équivalent à l’absence de valeur.

Exemple pratique - Calcul de l’aire d’un rectangle

def aire_rectangle(longueur, largeur):
    return longueur * largeur

a = aire_rectangle(4, 3)
print(f"L’aire du rectangle est {a} m²")

Ici, la fonction calcule une valeur et la renvoie à l’endroit où elle a été appelée. Contrairement au C/C++, aucune variable temporaire ni déclaration de type n’est nécessaire : Python gère tout automatiquement, ce qui rend le code plus lisible et plus rapide à écrire.

Variables locales et globales

Définition
Une variable locale est créée à l’intérieur d’une fonction et n’existe qu’à l’intérieur de celle-ci. Une variable globale est définie en dehors de la fonction et accessible depuis tout le programme.

Exemple

x = 10  # variable globale

def afficher():
    x = 5   # variable locale
    print("x dans la fonction =", x)

afficher()
print("x en dehors =", x)

Ici, deux variables différentes portent le même nom x, mais elles vivent dans des espaces mémoire distincts :

Ce concept s'appelle la portée des variables (scope en anglais).

Modifier une variable globale

Si tu veux modifier une variable globale à l’intérieur d’une fonction, il faut utiliser le mot-clé global :

compteur = 0

def incrementer():
    global compteur
    compteur += 1

incrementer()
print(compteur)

Le mot-clé global indique à Python qu’on souhaite accéder à la variable existante définie à l’extérieur, et non en créer une nouvelle localement.

Bonnes pratiques pédagogiques

Valeurs par défaut

Il est possible de donner une valeur par défaut à un paramètre. Ainsi, si l’appel de la fonction ne fournit pas d’argument, Python utilisera cette valeur automatiquement.

def saluer(nom="inconnu"):
    print(f"Bonjour {nom} !")

saluer("Alice") # Affiche "Bonjour Alice !"
saluer()         # Affiche "Bonjour inconnu !"

Cette fonctionnalité rend les fonctions plus souples et plus simples à utiliser, notamment pour gérer des cas optionnels.
En C ou C++, il faut souvent surcharger la fonction (écrire plusieurs versions avec des signatures différentes) pour obtenir le même comportement.
En Python, une seule définition suffit grâce aux paramètres par défaut.

Les valeurs par défaut peuvent être de n’importe quel type (nombre, chaîne, liste, etc.), et elles sont évaluées une seule fois lors de la définition de la fonction.
Cela signifie qu’il faut éviter d’utiliser des objets modifiables (comme les listes) comme valeur par défaut, car ils seraient partagés entre plusieurs appels.

Fonctions avec plusieurs retours

Une fonction peut renvoyer plusieurs valeurs à la fois, sous forme de tuple. C’est une fonctionnalité très pratique de Python, qui permet de retourner plusieurs résultats sans avoir besoin d’utiliser des structures complexes ou des pointeurs, comme c’est le cas en C/C++. Cela rend le code à la fois plus lisible et plus pédagogique pour comprendre le passage et la manipulation de données entre les fonctions.

def calculs(a, b):
    return a + b, a * b

somme, produit = calculs(3, 5)
print("Somme =", somme)
print("Produit =", produit)

Ici, la fonction calculs() renvoie deux valeurs : la somme et le produit.
Python les regroupe automatiquement dans un tuple, puis les “dépaquette” lors de l’affectation : (somme, produit) = (8, 15)somme = 8, produit = 15.
Ce mécanisme est appelé dépaquetage (unpacking), et il peut être utilisé dans de nombreux contextes.

Exemple : fonction qui calcule plusieurs résultats

def statistiques(notes):
    moyenne = sum(notes) / len(notes)
    minimum = min(notes)
    maximum = max(notes)
    return moyenne, minimum, maximum

m, mi, ma = statistiques([12, 15, 9, 18])
print(f"Moyenne : {m:.1f}, Min : {mi}, Max : {ma}")

Ici, la fonction statistiques() retourne trois valeurs à la fois : la moyenne, la note minimale et la note maximale.

L’intérêt est de conserver la cohérence des données : la fonction effectue tous les calculs, et le programme principal se contente de les récupérer.

Bonnes pratiques

Exemple - Documentation d’une fonction

def aire_triangle(base, hauteur):
    """Calcule l'aire d'un triangle à partir de sa base et de sa hauteur.
    
    Paramètres :
        base (float) : longueur de la base du triangle.
        hauteur (float) : hauteur correspondante.
    
    Retourne :
        float : aire du triangle calculée selon la formule (base * hauteur) / 2.
    """
    return (base * hauteur) / 2

Tu peux ensuite afficher cette documentation directement dans Python :

help(aire_triangle)

L'appel à help() affichera :

Help on function aire_triangle in module __main__:

aire_triangle(base, hauteur)
    Calcule l'aire d'un triangle à partir de sa base et de sa hauteur.
    
    Paramètres :
        base (float) : longueur de la base du triangle.
        hauteur (float) : hauteur correspondante.
    
    Retourne :
        float : aire du triangle calculée selon la formule (base * hauteur) / 2.
Dans le langage C ou C++, les commentaires remplissent souvent ce rôle, mais ils ne sont **pas consultables dynamiquement**.

En Python, la docstring fait partie intégrante de l’objet fonction : elle est accessible pendant l’exécution, ce qui favorise une programmation auto-documentée — une excellente habitude à inculquer dès les débuts.