Bases & algorithmique · 6 mondes · 18 étapes
Python avancé
Le langage lui-même : texte, compréhensions, objets, erreurs, modules.
Progression
0 %
0/18 étapes terminées
Avancé · 12 min de lecture
Python en projet réel
Environnements, types, tests et outillage
1Définition
Écrire du Python qui tient dans un projet suppose quatre choses au-delà du langage : un environnement isolé par projet, des annotations de type vérifiées par un outil, des tests automatisés, et un formateur qui met fin aux débats de style.
2Principes fondamentaux
01
Un environnement par projet
python -m venv .venv isole les dépendances. Sans lui, deux projets se disputent les versions de la même bibliothèque.
02
Les types documentent et vérifient
def moyenne(notes: list[float]) -> float: n'est pas contrôlé à l'exécution, mais un vérificateur (mypy, Pyright) attrape des erreurs avant la mise en production.
03
Les tests remplacent l'espoir
pytest exécute des fonctions test_* qui vérifient le comportement attendu, y compris les cas limites qu'on oublie de retester à la main.
04
Le style ne se discute pas
Un formateur automatique (Black, Ruff) applique PEP 8 sans débat et rend les différences de code lisibles.
3Exemples pratiques
Une fonction annotée et testée
1def moyenne(notes: list[float]) -> float:2 if not notes:3 return 0.04 return sum(notes) / len(notes)5 6# test_moyenne.py, exécuté par pytest7def test_moyenne_normale():8 assert moyenne([10, 20]) == 159 10def test_moyenne_vide():11 assert moyenne([]) == 0.0Deux tests de quatre lignes qui garantissent le comportement pour toujours, y compris après une réécriture.
Le cycle de travail
1python -m venv .venv # créer l'environnement2.venv\Scripts\activate # l'activer (Windows)3pip install -r requirements.txt4ruff format . # formater5ruff check . # analyser6pytest # testerCinq commandes qui constituent le quotidien d'un projet Python, et ce que fera votre intégration continue.
4Erreurs courantes
Installer en global
À éviter
pip install pandas # hors environnementÀ faire
python -m venv .venv puis pip install pandasPourquoi : Les versions finissent par entrer en conflit entre projets, et le problème n'apparaît que sur une autre machine.
Croire que les annotations sont vérifiées
À éviter
def f(x: int) -> int: ... # puis f("texte")À faire
# faire tourner mypy ou Pyright dans l'intégration continuePourquoi : Python ne vérifie rien à l'exécution : sans outil, l'annotation n'est qu'un commentaire.
5Subtilités à connaître
- ◆
requirements.txtfige les versions ; les projets modernes utilisentpyproject.tomlet un gestionnaire comme uv ou Poetry. - ◆Un test qui échoue rarement (dépendant de l'heure, du réseau, du hasard) coûte plus cher qu'il ne rapporte : rendre le code déterministe est un objectif de conception.
- ◆Les f-strings acceptent
=pour déboguer :print(f"{total=}")affiche « total=42 ».
6Techniques d'expert
Déboguer sans print
breakpoint() ouvre une console à l'endroit exact : on inspecte les variables au lieu de les deviner.
def moyenne(notes): breakpoint() return sum(notes) / len(notes)Mémoïser en une ligne
functools.lru_cache remplace le dictionnaire de cache écrit à la main.
from functools import lru_cache @lru_cache(maxsize=None)def fib(n: int) -> int: return n if n <= 1 else fib(n - 1) + fib(n - 2)Des données immuables et gratuites
Une dataclass(frozen=True) fournit constructeur, égalité, affichage et immuabilité en quatre lignes.
from dataclasses import dataclass @dataclass(frozen=True)class Fiche: nom: str score: int = 07Sur le terrain
- Les équipes exécutent formateur, analyseur et tests à chaque proposition de modification : ce qui n'est pas automatisé n'est pas appliqué.
- La lisibilité domine les revues de code, parce que c'est elle qui coûte le plus cher sur la durée d'un projet.
- La bibliothèque standard et quelques paquets éprouvés couvrent l'essentiel : la compétence rare est de savoir lequel appeler, pas de tout réécrire.
8Vérifie ta compréhension
Question 1/3
Score 0
À quoi sert un environnement virtuel ?
Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.