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