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
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
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
- 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.
- 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.
- Annotez d'abord les signatures des fonctions : c'est là que l'information sert le plus, aux collègues comme aux assistants de code.
- 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]).
- Les dataclasses et la bibliothèque pydantic s'appuient sur ces annotations pour décrire des enregistrements typés.
Voir aussi
- def — Définir une fonctiondef regroupe un traitement sous un nom, avec des paramètres en entrée et return en sortie. Écrivez une fonction dès qu'un calcul sert deux fois ou mérite d'être vérifié à part.
- Classes & dataclassesUne classe regroupe des données et les fonctions qui les manipulent ; @dataclass écrit à votre place __init__, l'affichage et la comparaison. Utilisez-la pour un enregistrement métier typé.
- *args & **kwargs*args et **kwargs acceptent un nombre variable d'arguments, et les marqueurs / et * imposent un passage positionnel ou nommé. Ils permettent des fonctions souples au contrat clair.