logo oujood
🔍

Les fonctions en Python

Une fonction est un bloc de code nommé qu'on exécute en l'appelant. Elle évite de répéter le même code à plusieurs endroits et rend le programme plus lisible et plus facile à maintenir.

OUJOOD.COM

Définir une fonction

En Python, on définit une fonction avec le mot-clé def, suivi du nom de la fonction et de parenthèses. Tout le code indenté en dessous constitue le corps de la fonction. La définition seule n'exécute rien : il faut ensuite appeler la fonction pour que son code s'exécute.

  📋 Copier le code

# Définition de la fonction
def ma_fonction():
    print("Bonjour depuis cette fonction")
# Appel de la fonction
ma_fonction()

La structure est toujours la même : def + nom + parenthèses + deux-points, puis le corps indenté. Les parenthèses sont vides si la fonction n'a besoin d'aucune information pour travailler.

Les arguments

On passe des informations à une fonction via ses arguments, listés entre parenthèses lors de l'appel. Dans la définition, ces emplacements s'appellent des paramètres. La distinction est simple : le paramètre est le nom dans la définition, l'argument est la valeur passée à l'appel.

  📋 Copier le code

# La fonction attend un paramètre : nom
def ma_fonction(nom):
    print("Bonjour " + nom)
# On appelle la fonction avec différents arguments
ma_fonction("Emile")
ma_fonction("Sara")
ma_fonction("tout le monde")

Par défaut, une fonction doit être appelée avec exactement le nombre d'arguments déclarés. Trop ou pas assez provoque une erreur.

  📋 Copier le code

# Fonction qui attend 2 arguments
def ma_fonction(nom, prenom):
    return "Bonjour " + prenom + " " + nom
# Appel correct avec 2 arguments
salutation = ma_fonction("Dupont", "Emile")
print(salutation)
# Appel incorrect avec 1 seul argument → provoque une erreur TypeError
# ma_fonction("Dupont")

Arguments arbitraires : *args

Quand on ne sait pas combien d'arguments seront passés, on préfixe le paramètre avec *. La fonction reçoit alors un tuple contenant tous les arguments transmis.

  📋 Copier le code

# *voitures reçoit tous les arguments sous forme de tuple
def ma_fonction(*voitures):
    print("La voiture disponible est " + voitures[2])
ma_fonction("rouge", "blanche", "grise")  # grise

Arguments par mot-clé

On peut passer des arguments en utilisant la syntaxe clé=valeur. Dans ce cas, l'ordre des arguments lors de l'appel n'a plus d'importance.

  📋 Copier le code

# L'ordre des arguments par mot-clé est libre
def ma_fonction(voiture1, voiture2, voiture3):
    print("La voiture disponible est " + voiture2)
ma_fonction(voiture3="rouge", voiture2="blanche", voiture1="grise")

Arguments par mot-clé arbitraires : **kwargs

Avec ** devant le paramètre, la fonction reçoit un dictionnaire contenant tous les arguments nommés passés à l'appel. Utile quand le nombre de paramètres nommés est inconnu à l'avance.

  📋 Copier le code

# **voitures reçoit tous les arguments nommés sous forme de dictionnaire
def ma_fonction(**voitures):
    print("La voiture disponible est " + voitures["voiture3"])
ma_fonction(voiture3="rouge", voiture2="blanche", voiture1="grise")

Valeur par défaut d'un paramètre

On peut définir une valeur par défaut pour un paramètre. Si l'argument correspondant n'est pas passé lors de l'appel, la valeur par défaut est utilisée.

  📋 Copier le code

# "noire" est la valeur par défaut si aucun argument n'est passé
def ma_fonction(voiture="noire"):
    print("La voiture disponible est " + voiture)
ma_fonction("rouge")   # rouge
ma_fonction("blanche") # blanche
ma_fonction()          # noire (valeur par défaut)

Passer une liste comme argument

On peut passer n'importe quel type de données à une fonction : chaîne, entier, liste, dictionnaire, ensemble. La fonction le reçoit tel quel et peut le parcourir normalement.

  📋 Copier le code

def ma_fonction(voitures):
    for voiture in voitures:
        print("La voiture disponible est " + voiture)
voitures = ["rouge", "blanche", "grise"]
ma_fonction(voitures)

Valeur de retour avec return

L'instruction return termine la fonction et renvoie une valeur à l'endroit où elle a été appelée. Sans return, une fonction retourne implicitement None.

  📋 Copier le code

# La fonction retourne le produit de a et b
def ma_fonction(a, b):
    return a * b
print(ma_fonction(2, 3))   # 6
print(ma_fonction(5, 10))  # 50

L'instruction pass

Le corps d'une fonction ne peut pas être vide. Si on veut définir une fonction sans contenu pour l'instant (structure en cours de développement), on utilise pass comme ligne de remplissage.

  📋 Copier le code

# pass évite l'erreur SyntaxError sur une fonction vide
def mafonction():
    pass

Introduction à la récursion

Une fonction peut s'appeler elle-même : c'est ce qu'on appelle la récursion. Chaque appel traite une version réduite du problème jusqu'à atteindre un cas de base qui arrête les appels. Il faut toujours prévoir cette condition d'arrêt, sinon la fonction tourne indéfiniment.

  📋 Copier le code

def tri_recursion(k):
    if k > 0:
        result = k + tri_recursion(k - 1)  # appel récursif avec k-1
        print(result)
    else:
        result = 0  # cas de base : on arrête quand k vaut 0
    return result
print("Résultats de l'exemple de récursion")
tri_recursion(6)

Pour aller plus loin sur ce sujet : cours complet sur les fonctions récursives.

Par carabde | Mis à jour le 24 avril 2026