Passer au contenu principal
eLearner.app
Module 9 · Leçon 1 sur 433/36 dans le cours~12 min
Leçons du module (1/4)

Type hints : annoter les types

Les indications de type ou type hints (annotations de type) sont des déclarations facultatives indiquant que "cette variable/paramètre a le type X". Python ne les vérifie PAS à l'exécution : elles sont pour vous, votre éditeur (l'autocomplétion !) et des outils comme mypy ou pyright qui effectuent un contrôle statique des types.

Annoter des variables

Python
nome: str = "Ada"
anni: int = 36
attivo: bool = True
prezzi: list[float] = [1.2, 3.4]

La syntaxe est nom: type = valeur. Sans valeur, il s'agit d'une simple déclaration :

Python
risultato: int  # nessuna assegnazione, solo "annuncio del tipo"

Annoter des fonctions

Python
def saluta(nome: str, urlante: bool = False) -> str:
    s = f"Ciao {nome}"
    return s.upper() if urlante else s

def somma(numeri: list[int]) -> int:
    return sum(numeri)

Syntaxe : param: type pour chaque paramètre, -> type pour le retour. Une fonction qui ne renvoie rien utilise -> None.

Types génériques intégrés (Python 3.9+)

Python
nomi: list[str] = ["a", "b"]
mappa: dict[str, int] = {"x": 1}
coppia: tuple[int, str] = (1, "ok")
unici: set[int] = {1, 2, 3}

Optional et Union

Une valeur qui peut être None :

Python
def trova_utente(id: int) -> str | None:
    if id == 1:
        return "Ada"
    return None

X | None est la syntaxe moderne (Python 3.10+). Équivalent : Optional[X] de typing. Pour les unions de plusieurs types : int | str | float.

typing : outils utiles

Python
from typing import Any, Callable

def applica(f: Callable[[int], int], x: int) -> int:
    return f(x)

valore: Any = "qualunque cosa"  # disabilita il check
  • Any = "ne pas contrôler" (à utiliser avec modération).
  • Callable[[arg1, arg2], retour] = une fonction qui prend ces paramètres et renvoie ce type.

mypy : le contrôleur de types

Vous installez mypy, lancez mypy fichier.py, et il vous dit si les types correspondent :

Bash
$ mypy script.py
script.py:5: error: Argument 1 to "somma" has incompatible type "str"; expected "int"

Contrôle des types avec mypy

Les indications de type de Python ne sont pas appliquées à l'exécution par l'interpréteur ; elles sont ignorées pendant l'exécution. Pour valider l'exactitude des types, vous devez exécuter un outil externe d'analyse statique comme mypy en lançant la commande mypy script.py dans votre terminal.

À vous de jouer

Exercice#python.m9.l1.e1
Tentatives : 0Chargement…

Définissez une fonction `double(numbers: list[int]) -> list[int]` qui renvoie une liste avec chaque élément multiplié par 2. Appelez-la avec [1, 2, 3] et assignez-la à `r`. Évaluez `r`.

Chargement de l'éditeur…
Afficher l'indice

Utilisez une compréhension de liste ou une boucle for.

Solution disponible après 3 tentatives

Exercice de révision

Exercice#python.m9.l1.e2
Tentatives : 0Chargement…

Définissez `first_or_none(items: list[int]) -> int | None` qui renvoie le premier élément si la liste n'est pas vide, sinon None. Assignez `a = first_or_none([10, 20])` et `b = first_or_none([])`. Évaluez `(a, b)`.

Chargement de l'éditeur…
Afficher l'indice

`if items` est vrai lorsque la liste n'est pas vide.

Solution disponible après 3 tentatives

Défi supplémentaire

Exercice#python.m9.l1.e3
Tentatives : 0Chargement…

Écrivez une fonction `double_value(n: int) -> int` qui prend un entier, le multiplie par 2 et renvoie le résultat. Veillez à spécifier des indications de type pour le paramètre et la valeur de retour. Enfin, évaluez `double_value(5)`.

Chargement de l'éditeur…
Afficher l'indice

Utilisez n: int comme paramètre et -> int après la signature de la fonction.

Solution disponible après 3 tentatives