Introduction aux décorateurs
Glissez pour afficher le menu
Un décorateur en Python est une fonction d'ordre supérieur qui prend une autre fonction comme argument et retourne une nouvelle fonction qui étend ou modifie le comportement de la fonction d'origine.
Les décorateurs sont une fonctionnalité essentielle de Python permettant de modifier ou d'améliorer le comportement de fonctions ou de méthodes sans modifier directement leur code. Fondamentalement, les décorateurs sont des fonctions d'ordre supérieur — ils prennent une autre fonction en argument, en étendent ou modifient le comportement, puis retournent une nouvelle fonction. En Python, la syntaxe pour appliquer un décorateur utilise le symbole @ suivi du nom du décorateur, placé directement au-dessus de la définition de la fonction.
Exemples courants d'utilisation des décorateurs :
- Journalisation ;
- Mesure du temps d'exécution des fonctions ;
- Contrôle d'accès ou gestion des permissions ;
- Mémorisation (mise en cache des résultats) ;
- Validation des entrées.
Les décorateurs permettent de séparer ce type de logique du cœur de la logique métier, ce qui conduit à un code plus propre et plus facile à maintenir. Maîtriser les décorateurs offre un outil puissant pour écrire du code Python réutilisable et expressif.
12345678910111213def simple_decorator(func): def wrapper(*args, **kwargs): print("Before the function call") result = func(*args, **kwargs) print("After the function call") return result return wrapper @simple_decorator def greet(name): print(f"Hello, {name}!") greet("Alice")
Comprendre *args et **kwargs dans les définitions de fonctions
Lors de l'écriture de décorateurs et de wrappers, il est souvent nécessaire de gérer des fonctions acceptant un nombre ou un type quelconque d'arguments. Python fournit *args et **kwargs pour rendre cela possible.
*argscollecte tous les arguments positionnels supplémentaires passés à une fonction dans un tuple ;**kwargscollecte tous les arguments nommés supplémentaires dans un dictionnaire.
Cette flexibilité est essentielle pour les décorateurs. Un décorateur doit pouvoir accepter et transmettre tous les arguments à la fonction d'origine, quel que soit leur nombre ou leur type. Sans *args et **kwargs, le décorateur ne fonctionnerait qu'avec des fonctions ayant une signature fixe, limitant ainsi la réutilisabilité.
123456789101112def my_decorator(func): def wrapper(*args, **kwargs): print("Arguments:", args) print("Keyword arguments:", kwargs) return func(*args, **kwargs) return wrapper @my_decorator def example(a, b, greeting="Hello"): print(f"{greeting}, {a} and {b}!") example(1, 2, greeting="Hi")
Cette méthode garantit que le décorateur peut envelopper n'importe quelle fonction, rendant le code à la fois robuste et réutilisable.
1. Quel est le but du symbole @ en Python ?
2. Comment un décorateur modifie-t-il le comportement d'une fonction ?
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion