Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Introduction aux décorateurs | Maîtriser les itérateurs et les décorateurs Python
Concepts de Programmation Fonctionnelle en Python

bookIntroduction aux décorateurs

Glissez pour afficher le menu

Note
Définition

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.

12345678910111213
def 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")
copy

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.

  • *args collecte tous les arguments positionnels supplémentaires passés à une fonction dans un tuple ;
  • **kwargs collecte 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é.

123456789101112
def 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")
copy

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 ?

question mark

Quel est le but du symbole @ en Python ?

Sélectionnez la réponse correcte

question mark

Comment un décorateur modifie-t-il le comportement d'une fonction ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 1

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Section 4. Chapitre 1
some-alt