Spécifier le type souhaité
Dans cette étape, nous allons explorer comment spécifier le type souhaité pour les variables et les arguments de fonction, et comment imposer ces types à l'aide d'indices de type (type hints) et de vérifications conditionnelles. Bien que Python soit un langage à typage dynamique, les indices de type vous permettent d'ajouter des informations de type statique à votre code, que des vérificateurs de type comme mypy
peuvent utiliser pour détecter les erreurs de type avant l'exécution.
Les indices de type sont des annotations qui spécifient le type attendu d'une variable, d'un argument de fonction ou de la valeur de retour d'une fonction. Ils sont écrits en utilisant la syntaxe :
pour les variables et les arguments, et la syntaxe ->
pour les valeurs de retour.
Commençons par ajouter des indices de type à notre exemple précédent.
-
Ouvrez l'éditeur VS Code dans l'environnement LabEx.
-
Créez un nouveau fichier nommé type_hints.py
dans le répertoire ~/project
.
~/project/type_hints.py
-
Ajoutez le code suivant à type_hints.py
:
def add_numbers(x: int, y: int) -> int:
"""Adds two numbers together."""
return x + y
## Example usage
result: int = add_numbers(5, 3)
print(f"Result: {result}")
## Example with incorrect types
## This will not raise an error at runtime, but a type checker will flag it
## result: int = add_numbers("5", "3")
## print(f"Result: {result}")
Dans ce script :
x: int
et y: int
spécifient que les arguments x
et y
doivent être des entiers.
-> int
spécifie que la fonction add_numbers
doit retourner un entier.
result: int
spécifie que la variable result
doit être un entier.
-
Exécutez le script en utilisant la commande python
dans le terminal :
python ~/project/type_hints.py
Vous devriez voir une sortie similaire à ce qui suit :
Result: 8
Le script s'exécute sans erreur car les types sont corrects. Cependant, si vous décommentez les lignes avec des types incorrects, le script s'exécutera toujours, mais un vérificateur de type comme mypy
signalerait ces lignes comme des erreurs de type.
Pour installer et exécuter mypy
, vous pouvez utiliser les commandes suivantes :
pip install mypy
mypy ~/project/type_hints.py
Étant donné que pip
n'est pas pré-configuré, vous pourriez rencontrer des erreurs liées à des paquets manquants ou à des versions incorrectes. Dans le cadre de ce laboratoire, nous nous concentrerons sur la démonstration du concept des indices de type et des vérifications conditionnelles.
Une autre façon d'imposer des types est d'utiliser des vérifications conditionnelles dans votre code. Cela vous permet de lever des exceptions si les types ne sont pas ceux que vous attendez.
def divide_numbers(x, y):
if not isinstance(x, (int, float)):
raise TypeError("x must be a number")
if not isinstance(y, (int, float)):
raise TypeError("y must be a number")
if y == 0:
raise ValueError("y cannot be zero")
return x / y
## Example usage
result = divide_numbers(10, 2)
print(f"Result: {result}")
## Example with incorrect types
## This will raise a TypeError
## result = divide_numbers("10", 2)
## print(f"Result: {result}")
Dans cet exemple, nous utilisons isinstance()
pour vérifier si x
et y
sont des nombres (soit des int
, soit des float
). Si ce n'est pas le cas, nous levons une TypeError
. Nous vérifions également si y
est égal à zéro et levons une ValueError
dans ce cas.
En combinant les indices de type et les vérifications conditionnelles, vous pouvez écrire un code Python plus robuste et maintenable, moins sujet aux erreurs de type.