En tant que Data Scientist (et dĂ©veloppeur python), j'ai besoin d'utiliser et de rĂ©utiliser les mĂȘmes fonctions en Python, mais il peut parfois ĂȘtre utile d'ajouter quelques diffĂ©rences ou comportements mineurs Ă ces fonctions. Au lieu d'utiliser des fonctions internes, les dĂ©corateurs pourraient ĂȘtre le moyen le plus simple d'y parvenir.
NB : cet article âPython decorator. An introductionâ est disponible en anglais via le profil linkedin de son auteur Christophe Thibault.
â
NB : Cet article fait partie dâune sĂ©rie d'articles dont le premier Ă©pisode Astuce Python : la fonction PIPE est dâores et dĂ©jĂ disponible.Â
â
En tant que Data Scientist (et dĂ©veloppeur python), j'ai besoin d'utiliser et de rĂ©utiliser les mĂȘmes fonctions en Python, mais il peut parfois ĂȘtre utile d'ajouter quelques diffĂ©rences ou comportements mineurs Ă ces fonctions.Â
Au lieu d'utiliser des fonctions internes, les dĂ©corateurs pourraient ĂȘtre le moyen le plus simple d'y parvenir.Â
â
â
Les dĂ©corateurs offrent un moyen Ă©lĂ©gant dâĂ©tendre ou de modifier le comportement des fonctions en Python. Ils me permettent d'envelopper ou de modifier des fonctions sans altĂ©rer leur code principal. Cela s'avĂšre particuliĂšrement utile pour des tĂąches telles que la journalisation, la synchronisation, l'authentification et la gestion d'autres problĂšmes transversaux de maniĂšre propre et rĂ©utilisable.Â
â
â
Prenons un exemple simple - une fonction qui imprime une seule phrase :
â
Si vous souhaitez changer le comportement de cette fonction, les dĂ©corateurs Python peuvent ĂȘtre utilisĂ©s comme cela :
â
DĂ©sormais, la fonction cat_func renvoie non seulement Ozzy est un chat, mais Ozzy est un chat du Bengale.Â
Le mot Bengal est insĂ©rĂ© avant le mot chat : les dĂ©corateurs enveloppent une fonction, modifiant son comportement.Â
â
Python permet d'utiliser les décorateurs de maniÚre plus simple avec le symbole @. C'est un moyen plus simple d'utiliser cat_func = my_decorator(cat_func).
âSi vous devez utiliser un argument (c'est Ă dire un nom dans l'exemple ci-dessous), vous devez utiliser *args et/ou **kwargs dans la fonction wrapper : wrapper(*args, **kwargs)
â
â
â
Une fois que vous avez appliquĂ© un dĂ©corateur Ă une fonction, vous ne pouvez pas revenir et obtenir le comportement initial de cette fonction.Â
Revenir facilement et supprimer le décorateur - encapsuler la fonction de functools - est le moyen de désencapsuler la fonction.
Comme vous pouvez le voir sur l'exemple ci-dessus, la fonction peut ĂȘtre dĂ©faite avec l'attribut .__wrapped__. Facile !Â
Vous ĂȘtes dĂ©sormais capable de comprendre le concept de dĂ©corateur en python, et d'utiliser des cas simples. Voici quelques liens pour obtenir plus d'informations sur ce sujet et le lien vers la bibliothĂšque functools (functools).Â
â
 #python #coding #decorator #functools