Aller au contenu
Fonctions

Annotations de type

Les annotations de type documentent ce qu'une fonction attend et renvoie (list[int], str | None). Python ne les vérifie pas à l'exécution, mais l'éditeur et mypy s'en servent pour repérer les erreurs.

  • type hints
  • annotations
  • typing
  • mypy
  • list[int]
  • Optional
  • None

Syntaxe

Modèle
def f(x: int, noms: list[str], seuil: float | None = None) -> dict[str, int]: ...total: float = 0.0type Vente = tuple[str, float]      # alias de type (Python 3.12)

Exemple

Exemple concret
type Vente = tuple[str, float]def ca_par_ville(ventes: list[Vente], ville: str | None = None) -> float:    """CA total, éventuellement filtré sur une ville."""    return sum(m for v, m in ventes if ville is None or v == ville)ventes: list[Vente] = [("Lyon", 120.0), ("Paris", 300.0), ("Lyon", 80.5)]print(ca_par_ville(ventes))             # → 500.5print(ca_par_ville(ventes, "Lyon"))     # → 200.5print(ca_par_ville.__annotations__["return"])  # → <class 'float'>

À retenir

  1. On écrit directement list[int] et dict[str, float] (3.9+) et X | None à la place de Optional[X] (3.10+) : les imports List, Dict et Optional de typing ne sont plus nécessaires.
  2. Piège : une annotation n'est pas un contrôle. ca_par_ville(ventes, 42) s'exécute sans erreur ; c'est un vérificateur statique (mypy, pyright ou celui de l'éditeur) qui la signale avant l'exécution.
  3. Annotez d'abord les signatures des fonctions : c'est là que l'information sert le plus, aux collègues comme aux assistants de code.
  4. Pour les paramètres, préférez des types larges (Iterable[float] ou Sequence[str] de collections.abc) ; pour les retours, des types précis (list[float]).
  5. Les dataclasses et la bibliothèque pydantic s'appuient sur ces annotations pour décrire des enregistrements typés.

Voir aussi