Prépa Python

Expert — chapitre 46 sur 54

Qualité du code : PEP 8, Black, linting

Écrire du code Pythonique, propre et maintenable

65 minAbonnés

Un code qui marche n'est qu'un début. Un code de qualité est lisible, cohérent, maintenable. La communauté Python a établi des conventions (PEP 8) et des outils automatiques (Black, Flake8, Ruff, mypy) qui vous aident à écrire comme un professionnel. C'est un sujet qui compte au TOSA Expert — et qui change la vie en entreprise.

Pourquoi la qualité de code compte

Trois constats :

  1. On lit le code beaucoup plus souvent qu'on l'écrit. Vos collègues (et vous-même dans 6 mois) passeront plus de temps à le comprendre qu'à le taper.
  2. Un code propre a moins de bugs. La clarté révèle les erreurs ; l'obscurité les cache.
  3. Une cohérence globale dans une équipe réduit les frictions. Plus de guerres d'accolades.

La PEP 8 est le guide de style officiel. Les outils modernes l'appliquent automatiquement.

La PEP 8 en 10 règles

La PEP 8 est longue. Voici les règles que vous devez connaître par cœur.

1. Indentation : 4 espaces

python
# ✅
def f():
    if condition:
        action()

Pas de tabulations. Configurez votre éditeur pour que Tab insère 4 espaces.

2. Longueur de ligne : 79 caractères max (ou 88 avec Black)

python
# ✅ Couper les longues lignes
resultat = fonction_avec_long_nom(
    argument_1,
    argument_2,
    argument_3,
)

La PEP 8 stricte dit 79. Black (voir plus bas) utilise 88 par défaut, considéré comme un compromis moderne.

3. Nommage

Élément Style Exemple
Variable, fonction, méthode snake_case ma_variable, calculer_moyenne()
Classe PascalCase CompteBancaire
Constante UPPER_SNAKE_CASE MAX_ESSAIS, PI
Privé (convention) préfixe _ _solde, _methode_interne
Module/package lowercase, court mon_module, utils

Trois formes d'underscores, à ne pas confondre :

  • _nom (un underscore devant) : la convention usuelle pour « privé ».
  • __nom (deux devant seulement) : déclenche le name mangling — usage rare et avancé.
  • __nom__ (deux de chaque côté) : réservé à Python (__init__, __str__). N'en créez pas.

4. Espacement

python
# ✅ Autour des opérateurs
x = 1 + 2
y = a * b - c

# ✅ Après une virgule
def f(a, b, c):
    ...

# ❌ Pas d'espaces autour des = pour valeurs par défaut
def f(x=10): ...          # ✅
def f(x = 10): ...        # ❌

# ✅ Pas d'espace à l'intérieur des parenthèses
f(x, y)                   # ✅
f( x, y )                 # ❌

5. Lignes vides

python
# Deux lignes vides entre les fonctions/classes top-level
def fonction_1():
    ...

def fonction_2():
    ...

# Une ligne vide entre les méthodes d'une classe
class MaClasse:
    def methode_1(self):
        ...

    def methode_2(self):
        ...

6. Imports

python
# ✅ Un import par ligne
import os
import sys

# ❌ À éviter
import os, sys

# Ordre des imports (séparés par des lignes vides) :
# 1. Bibliothèque standard
import os
from pathlib import Path

# 2. Bibliothèques tierces
import requests
import numpy as np

# 3. Modules locaux
from .utils import fonction

7. Comparaisons

python
# ✅ Utilisez is avec None
if x is None:
    ...

# ❌
if x == None:
    ...

# ✅ Négation claire
if not x:
    ...

# ❌ Double négation
if not x != 10:
    ...

8. Chaînes

Les guillemets simples et doubles sont équivalents. Choisissez-en un et tenez-vous-y. Black utilise "..." par défaut.

python
# Cohérence : tous simples ou tous doubles
nom = "Alice"
salutation = "Bonjour"

# Double si la chaîne contient un simple
citation = "Il a dit : 'salut'"

9. Docstrings

Pour chaque module, classe, fonction publique, écrivez une docstring (vu chapitre 2 partie 2).

python
def calculer_moyenne(notes):
    """Calcule la moyenne d'une liste de notes.

    Arguments:
        notes: liste de nombres (int ou float).

    Renvoie:
        La moyenne arithmétique, ou 0 si la liste est vide.
    """
    if not notes:
        return 0
    return sum(notes) / len(notes)

10. Commentaires

  • Expliquez le pourquoi, pas le comment (le code montre le comment).
  • Un commentaire inexact est pire que pas de commentaire.
  • Mettez les commentaires à jour quand vous modifiez le code.
python
# ❌ Inutile : le code dit exactement ça
x = x + 1     # on ajoute 1 à x

# ✅ Utile : explique le "pourquoi"
x = x + 1     # on compense l'offset de l'index 0-based

L'outil phare : Black, le formateur « sans compromis »

Black est un formateur de code automatique. Vous exécutez black mon_fichier.py, et votre code est reformaté selon des règles fixes et non négociables.

Installation

bash
pip install black

Utilisation

bash
# Formater un fichier
black mon_script.py

# Formater tout un dossier
black .

# Vérifier sans modifier
black --check .

# Voir les changements sans les appliquer
black --diff mon_script.py

Avant/après Black

Code mal formaté :

python
def calculer_total(  prix, quantite  ,tva = 0.20 ):
    return prix*quantite*( 1+tva )

liste=[1 ,2,3,  4,5]

Après black :

python
def calculer_total(prix, quantite, tva=0.20):
    return prix * quantite * (1 + tva)

liste = [1, 2, 3, 4, 5]

Suite réservée aux abonnés

Débloquez l'intégralité du parcours

Les 54 chapitres, les exercices corrigés automatiquement, les examens blancs et le suivi de votre progression.

Voir les offresChapitres en accès libre

Déjà un accès ? Connectez-vous.