Comment créer des décorateurs de fonctions et les enchaîner ensemble
Introduction
Les décorateurs en Python permettent vous de modifier le comportement des fonctions sans modifier les fonctions elles-mêmes. Vous pouvez utiliser des décorateurs pour ajouter des fonctionnalités, vérifier les entrées/sorties et effectuer d'autres opérations avant et après l'appel de la fonction.
Création d'un décorateur
Pour créer un décorateur , définissez une fonction qui prend une autre fonction comme argument. Cette fonction doit renvoyer une nouvelle fonction qui enveloppe la fonction d'origine.
def make_bold(fn): # The new function the decorator returns def wrapper(): # Insertion of some code before and after return "<b>" + fn() + "</b>" return wrapper
Chaînage de décorateurs
Vous pouvez chaîner des décorateurs pour appliquer plusieurs modifications à une fonction. Appliquez simplement chaque décorateur tour à tour, comme indiqué ci-dessous :
@make_bold @make_italic def say(): return "hello"
Ce code applique le décorateur make_bold au décorateur make_italic, qui à son tour est appliqué à la fonction say. Le résultat est que la fonction say renvoie une chaîne à la fois en gras et en italique.
Exemple : chaîner des décorateurs pour formater le texte
Supposons que vous ayez une fonction qui renvoie un chaîne de texte. Vous souhaitez ajouter une mise en forme grasse et italique au texte. Vous pouvez utiliser les décorateurs définis ci-dessus pour y parvenir :
@make_bold @make_italic def formatted_text(text): return text print(formatted_text("Hello world"))
Sortie :
<b><i>Hello world</i></b>
Passer des arguments aux décorateurs
Vous pouvez transmettre des arguments aux décorateurs en plaçant les arguments dans parenthèses :
def a_decorator_passing_arguments(function_to_decorate): def a_wrapper_accepting_arguments(arg1, arg2): print("I got args! Look: {0}, {1}".format(arg1, arg2)) function_to_decorate(arg1, arg2) return a_wrapper_accepting_arguments @a_decorator_passing_arguments def print_full_name(first_name, last_name): print("My name is {0} {1}".format(first_name, last_name)) print_full_name("Peter", "Venkman")
Sortie :
I got args! Look: Peter, Venkman My name is Peter Venkman
Conclusion
En comprenant comment créer et enchaîner des décorateurs, vous pouvez étendre les fonctionnalités de vos fonctions Python. Cette technique puissante vous permet de modifier le comportement, d'effectuer des contrôles et d'enrichir votre code de manière modulaire et réutilisable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!