Indications de type pratiques
Combiner les fonctions lambda avec les indications de type
Indications de type de base pour les fonctions lambda
from typing import Callable
## Fonction lambda avec indications de type
multiply: Callable[[int, int], int] = lambda x, y: x * y
result = multiply(5, 3)
print(result) ## Sortie : 15
Stratégies d'indication de type pour les fonctions lambda
Annotations de type simples
## Lambda avec indications de type explicites
process_number: Callable[[float], float] = lambda x: x * 2.5
print(process_number(4.0)) ## Sortie : 10.0
Indications de type complexes pour les fonctions lambda
from typing import List, Callable
## Lambda pour le traitement de listes
filter_even: Callable[[List[int]], List[int]] = lambda nums: list(filter(lambda x: x % 2 == 0, nums))
numbers = [1, 2, 3, 4, 5, 6]
print(filter_even(numbers)) ## Sortie : [2, 4, 6]
Flux de travail d'indication de type
graph TD
A[Fonction lambda] --> B{Annotation de type}
B --> C[Contrôle de type statique]
C --> D{Le type est correct?}
D -->|Oui| E[Exécution du code]
D -->|Non| F[Erreur de type]
Techniques avancées d'indication de type
Types optionnels et d'union
from typing import Optional, Union
## Lambda avec types optionnels et d'union
safe_divide: Callable[[float, float], Optional[float]] = lambda x, y: x / y if y!= 0 else None
## Lambda avec type d'union
process_value: Callable[[Union[int, str]], str] = lambda x: str(x).upper()
Modèles et pièges courants
Modèle |
Description |
Meilleure pratique |
Transformation simple |
Conversion de type sur une seule ligne |
Utiliser des indications de type explicites |
Logique complexe |
Plusieurs opérations |
Considérer les fonctions nommées |
Gestion d'erreurs |
Traitement conditionnel |
Ajouter des vérifications de type sécurisées |
from typing import Callable
import timeit
## Comparaison des performances de fonctions lambda typées et non typées
typed_lambda: Callable[[int], int] = lambda x: x * 2
untyped_lambda = lambda x: x * 2
## Comparaison de temps d'exécution
typed_time = timeit.timeit(lambda: typed_lambda(10), number=100000)
untyped_time = timeit.timeit(lambda: untyped_lambda(10), number=100000)
Meilleures pratiques pour l'indication de type des fonctions lambda
- Utiliser
Callable
pour les indications de type de fonction
- Spécifier les types d'entrée et de sortie
- Garder les fonctions lambda simples
- Utiliser des vérificateurs de type comme mypy
Exemple dans le monde réel
from typing import List, Callable
def apply_transformation(
data: List[int],
transformer: Callable[[int], int]
) -> List[int]:
return list(map(transformer, data))
## Utilisation de fonction lambda avec indications de type
squared: Callable[[int], int] = lambda x: x ** 2
numbers = [1, 2, 3, 4, 5]
result = apply_transformation(numbers, squared)
print(result) ## Sortie : [1, 4, 9, 16, 25]
Au LabEx, nous soulignons l'importance de code clair avec des indications de type pour une meilleure maintenabilité et lisibilité.