Python Avancé – Astuce n°1 : Les décorateurs

machine learning
Temps de lecture : 3 minutes
Share on facebook
Share on twitter
Share on linkedin
Share on email

Lorsqu’on fait du Machine Learning en Python, on n’a pas nécessairement besoin de toutes les caractéristiques de ce langage: scikit-learnnumpy et pandas sont très bien développées et ne nécessitent pas beaucoup plus de connaissances que des bases en Programmation Orientée Objet et un peu de méthode.

Toutefois le travail du Data Scientist consiste parfois à créer des APIs pour accéder à un modèle ou à des données: pour nous, cette responsabilité échoit au Data Engineer mais dans beaucoup de structures, c’est la responsabilité du Data Scientist. Par exemple, une entreprise comme Amazon crée toutes ses features sous forme d’API. Il est donc essentiel de se familiariser aux APIs en plus de connaître le Machine Learning, le Deep Learning, la Data Visualization et les différentes techniques statistiques d’exploration des données. 
Pour ne pas se départir de son langage préféré, le Data Scientist va alors naturellement se tourner vers Flask. C’est la technologie que nous avons choisi de mettre en avant dans notre formation de Data Engineering.

Flask c’est bien mais...

Flask, une fois qu’on a compris la syntaxe, est en effet très simple à utiliser. Mais la première fois qu’on l’utilise, on se retrouve confronté à ce genre de code:
Ce @app.route tout droit sorti des enfers qui vient remettre en question votre compréhension globale de Python…

Les décorateurs

decorateurs
À priori rien à voir ...
Ce @ est utilisé en Python pour introduire un décorateur (et non, il n’est pas simplement là pour faire joli…). Il se place juste avant une fonction et permet d’envelopper (wrap) la fonction dans une autre fonction appelée le wrapper
Ainsi si je veux construire une fonction qui prend en mesure et affiche le temps pris par une fonction pour tourner, je peux l’implémenter de la manière suivante:
On remarquera que cette fonction prend en argument une fonction (function comme son nom l’indique), qu’à l’intérieur elle définit une nouvelle fonction (timed_function) et qu’elle retourne cette nouvelle fonction. 
Ainsi  lorsque que j’utilise un décorateur, je pourrais voir le temps s’afficher à la fin de son exécution.
Les décorateurs sont très utiles pour vérifier le type des données, pour afficher des informations sur le fonctionnement de la fonction sans pour autant avoir à le recoder dans chaque fonction. C’est très utilisé dans Flask évidemment mais aussi dans beaucoup des codes sources de nos librairies préférées: un exemple, un autre, et un troisième pour la route

Aller un tout petit peu plus loin …

Bon quand moi j’ai vu ça, je me suis posé quelques questions (et pas seulement est-ce que c’est bien utile). 
Peut-on passer des arguments au décorateur et non à la fonction décorée? Oui mais la syntaxe est un peu plus complexe:
Est-ce qu’on peut enchaîner les décorateurs? Sans problème:
 
Est-ce qu’on peut décorer des méthodes? Oui
Est-ce qu’on peut décorer des classes ? Oui
python avancé
Un décorateur de classe ?
Les décorateurs sont des outils assez intéressants. Ils paraissent surprenant au premier abord mais permettent de se simplifier le travail une fois qu’on a compris comment ils fonctionnaient. Vous ne les rencontrerez pas tous les jours mais si jamais ça arrive, alors vous aurez été préparés.

Cet article vous a plu ? N’hésitez pas à vous abonner à notre newsletter pour recevoir des astuces data que vous ne trouverez nulle part ailleurs ! 

Dossiers grand public

DataScientist : Recrutement VS Formation

Pour la 5ème année consécutive, le métier de Data Scientist a été désigné comme le meilleur emploi aux USA par Glassdoor c’est aussi le métier qui connaît la croissance la plus rapide.

Lire plus »
Data challenge
Actu

Le Data Challenge, pourquoi faire ?

Le Data Challenge est aujourd’hui utilisé par de nombreuses entreprises. Le but est de faire parler au mieux les données pour apporter la meilleure solution à un problème. Quels objectifs ? Comment le mettre en place ?

Lire plus »
Fermer le menu