Introduction
Les décorateurs Python sont un outil puissant qui vous permet d’étendre et de modifier le comportement des fonctions sans modifier leur code de façon permanente. Ils constituent un moyen propre et expressif d’ajouter des fonctionnalités à vos fonctions, ce qui rend votre code plus modulaire et plus facile à maintenir.
Dans ce tutoriel, nous expliquerons le concept des décorateurs, nous vous montrerons comment ils fonctionnent et nous vous fournirons des exemples pratiques pour vous aider à incorporer les décorateurs dans vos propres projets.
Qu’est-ce qu’un décorateur?
Un décorateur en Python est une fonction qui prend une autre fonction en argument, lui ajoute des fonctionnalités et renvoie une nouvelle fonction. Les décorateurs sont souvent utilisés pour:
- Logging: Enregistrement du moment où les fonctions sont appelées.
- Contrôle d’accès: Vérifier les permissions avant d’exécuter une fonction.
- Mise en cache : Stockage des résultats d’appels de fonctions coûteux.
- Timing: Mesure du temps d’exécution des fonctions.
Exemple de décorateur de base
Vous trouverez ci-dessous un exemple simple qui montre comment créer et utiliser un décorateur pour ajouter un comportement avant et après un appel de fonction.
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Avant l'appel de la fonction")
= func(*args, **kwargs)
result print("Après l'appel de la fonction")
return result
return wrapper
@my_decorator
def say_hello(name):
print(f"Hello, {name}!")
"Alice") say_hello(
Résultats:
Avant l'appel de la fonction
Bonjour, Alice!
Après l'appel de la fonction
Exemple avancé : Décorateur avec arguments
Les décorateurs peuvent également être conçus pour accepter des arguments, ce qui permet des modifications de comportement encore plus flexibles.
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
for i in range(n):
print(f"Répéter les salutations {i+1}/{n}:")
= func(*args, **kwargs)
result return result
return wrapper
return decorator
@repeat(3)
def greet(name):
print(f"Hello, {name}!")
"Bob") greet(
Résultats:
Répéter les salutations 1/3:
Bonjour, Bob!
Répéter les salutations 2/3:
Bonjour, Bob!
Répéter les salutations 3/3:
Bonjour, Bob!
Bonnes pratiques pour l’utilisation des décorateurs
Rester simple:
Écrire de petits décorateurs ciblés qui font bien une chose.Utiliser functools.wraps:
Lorsque vous écrivez des décorateurs, utilisezfunctools.wraps
pour préserver les métadonnées de la fonction d’origine.import functools def my_decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): print("Avant l'appel de la fonction") = func(*args, **kwargs) result print("Après l'appel de la fonction") return result return wrapper
Documenter vos décorateurs:
Commenter et documenter clairement l’objectif et l’utilisation de chaque décorateur.
Conclusion
Les décorateurs en Python fournissent un moyen flexible et élégant de modifier le comportement des fonctions. En maîtrisant les décorateurs, vous pouvez écrire un code plus modulaire et réutilisable, améliorer les fonctionnalités sans dupliquer le code, et mettre en œuvre des préoccupations transversales telles que la journalisation et la gestion des erreurs de manière plus propre. Expérimentez avec les exemples fournis ici, et essayez de créer vos propres décorateurs pour voir comment ils peuvent simplifier vos tâches de codage.
Plus d’informations
- Python pour débutants : votre premier script
- Syntaxe et variables en Python
- Programmation fonctionnelle en Python
Bon codage et bonne chance dans l’amélioration de vos fonctions avec les décorateurs!
Explorer d’autres articles
Voici d’autres articles de la même catégorie pour vous aider à approfondir le sujet.
Réutilisation
Citation
@online{kassambara2024,
author = {Kassambara, Alboukadel},
title = {Les décorateurs Python expliqués avec des exemples},
date = {2024-02-05},
url = {https://www.datanovia.com/fr/learn/programming/python/advanced/decorators-explained.html},
langid = {fr}
}
Comment fonctionnent les décorateurs
Lorsque vous appliquez un décorateur à une fonction en utilisant la syntaxe
@decorator_name
, Python transmet la fonction décorée au décorateur. Le décorateur renvoie alors une nouvelle fonction qui améliore ou modifie le comportement de la fonction d’origine.