Organiser et structurer son code Python

À mesure que les programmes deviennent plus longs, il devient indispensable de les structurer. Un bon programme ne doit pas être un seul fichier rempli d’instructions, mais un ensemble de modules clairs et cohérents, chacun ayant un rôle précis.

Dans ce chapitre, tu vas apprendre à organiser ton code en plusieurs fichiers, à importer des modules, et à réutiliser tes fonctions dans d’autres programmes. C’est une étape essentielle vers la programmation professionnelle.

Objectifs pédagogiques

  • Comprendre ce qu’est un module Python.
  • Savoir importer et utiliser un module existant.
  • Créer et réutiliser ses propres fichiers de fonctions.
  • Découvrir la structure typique d’un projet Python.

Qu’est-ce qu’un module ?

Définition
Un module est un fichier Python (.py) contenant du code (fonctions, classes, variables, constantes...) que l’on peut importer dans d’autres scripts pour le réutiliser.

Exemple

Fichier maths_utils.py :

def carre(x):
    return x * x

Fichier programme.py :

import maths_utils

print(maths_utils.carre(5))

Résultat :

25

Les différents types d’importation

Importer tout le module

import random

nombre = random.randint(1, 10)
print(nombre)

Importer une fonction spécifique

Il est possible d’importer uniquement certains éléments d’un module. L'objectif est de ne pas charger tout le module en mémoire si on n’a besoin que d’une partie.

from math import sqrt

print(sqrt(25))

Ici, seule la fonction sqrt est importée depuis le module math.

Renommer un module

De façon optionnelle, on peut renommer un module lors de l’importation avec le mot-clé as. Cela permet d’utiliser un nom plus court ou plus adapté dans le code.

import math as m

print(m.pi)

Importer plusieurs éléments

from math import pi, sqrt, ceil
x = 7.3
print(ceil(sqrt(x * pi)))

Les modules standards de Python

Python intègre de nombreux modules prêts à l’emploi :

ModuleUtilisation principaleExemple
mathFonctions mathématiquesmath.sqrt(16)
randomNombres aléatoiresrandom.randint(1, 6)
datetimeDates et heuresdatetime.date.today()
osFichiers, dossiers, systèmeos.listdir()
sysParamètres du programmesys.argv

Il en existe bien d’autres, adaptés à divers besoins (gestion des fichiers ZIP, communication réseau, traitement JSON, etc.). Vous peux consulter la documentation officielle pour une liste complète.

Exemple d’utilisation - Module datetime

import datetime

aujourdhui = datetime.date.today()
print("Nous sommes le", aujourdhui)

Créer ses propres modules

Tu peux organiser ton code en plusieurs fichiers pour le rendre plus lisible.

Créer un fichier outils.py

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

def aire_carre(cote):
    return cote ** 2

Créer un fichier principal main.py

import outils

outils.saluer("Alice")
print("Aire du carré :", outils.aire_carre(5))

Résultat :

Bonjour Alice !
Aire du carré : 25

Organisation typique d’un projet Python

Une bonne organisation aide à maintenir ton code sur le long terme.

mon_projet/
│
├── main.py               # programme principal
├── outils.py             # fonctions utilitaires
├── data/                 # fichiers de données
│   └── notes.csv
├── modules/              # sous-modules spécifiques
│   ├── calculs.py
│   └── affichage.py
└── README.md             # description du projet

Tu peux importer des fichiers situés dans le même dossier ou dans un sous-dossier.

Exemple d’import dans un sous-dossier

Fichier modules/calculs.py :

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

Fichier main.py :

from modules.calculs import addition

print(addition(3, 7))

Résultat :

10

Le bloc spécial if __name__ == "__main__":

Définition
Ce bloc permet de distinguer le moment où un fichier est exécuté directement de celui où il est importé comme module dans un autre script.

Exemple

# fichier outils.py
def dire_bonjour():
    print("Salut !")

if __name__ == "__main__":
    print("Ce fichier est exécuté directement.")
    dire_bonjour()

Bonnes pratiques de structuration