Parlons donc de certaines des applications pratiques des décorateurs, je veux dire, nous les avons déjà vues en classe, n'est-ce
pas ?
Nous avons vu comment la méthode de classe et la méthode statique pouvaient créer des méthodes de classe et des méthodes statiques sur la classe
que la classe directe peut utiliser.
Et si vous ne vous en souvenez pas, revenez simplement à ces vidéos.
Mais je veux vous montrer un de mes exemples préférés de décorateur, nous allons créer le nôtre.
Ce que nous allons faire, c'est que je veux avoir une performance.
Décorateur et d'ailleurs, ce décorateur n'existe pas en Python, nous allons le construire à partir de zéro.
Ce que je veux faire, c'est pouvoir avoir un décorateur de performances que je peux utiliser pendant le test de mon code pour voir
à quelle vitesse mon code s'exécute.
Par exemple, si j'avais une fonction, disons que cela prend du temps.
Eh bien, il y a beaucoup de temps à terminer, alors je vais faire une très longue boucle et dire pour moi dans une plage de
disons.
Tous ces nombres, et je vais juste faire un calcul aléatoire, je fois cinq.
Cette fonction, je veux savoir à quel point elle fonctionne, combien de millisecondes il faut pour la terminer, alors comment pouvons-nous
la construire ?
Tout d'abord, je vais faire quelque chose dont nous n'avons pas encore parlé, que nous allons
faire quelque chose sur les modules dans les modules intégrés, donc pour l'instant, nous n'allons pas
trop en parler, mais nous allons pour importer depuis le module de temps quelque chose appelé temps double.
Encore une fois, quelque chose dont nous parlerons dans la section module du cours, je dis
essentiellement, hé, quand j'ai installé Python ou dans mon cas quand j'utilise ce Reppel, il a accès à cette fois si je
demande pour ça.
Et dans ce cas, je dis, hé, je veux utiliser cet objet ou module temporel que je reçois de Python.
Et ici, nous allons créer notre décorateur en suivant le modèle que nous avons appris.
Je vais dire que définir la performance et la performance va accepter une fonction comme nous l'avons vu auparavant.
Et ici, nous aurons notre emballage.
Disons donc fonction wrapper et fonction wrapper.
Si vous vous en souvenez, cela va être flexible en prenant en compte les arcs d'étoiles et les arcs de mots-clés d'étoiles.
Pour qu'on puisse lui passer autant de paramètres qu'on veut, car on ne sait pas comment cette fonction, combien de paramètres
elle va avoir, et je veux pouvoir utiliser les performances sur toutes mes fonctions.
Maintenant, ici d'abord, ce que nous allons faire, c'est que nous allons avoir le résultat de la fonction.
Soit le.
Fonction que nous recevons ici et dire simplement.
Exécutez la fonction avec des arcs de mots-clés star et star star.
Et enfin, à la fin de cela, je veux retourner les résultats.
Et puis finalement, on va rendre le rappeur, donc rien qu'on n'ait pas vu avant, j'aurais pu juste faire revenir ici
ou juste lancer la fonction, mais je vais vous montrer pourquoi j'ai fait ça dans une seconde .
Pour le moment, notre fonction ne fait vraiment rien.
Si je clique, cours.
Bon, rien ne se passe si je fais longtemps et que je lance cette fonction.
Ça a juste pris beaucoup de temps à courir, mais c'est tout, il ne se passe rien.
C'est à ce moment-là que nous rendons les choses intéressantes.
Nous voulons calculer depuis le début de l'exécution de cette fonction jusqu'à la fin de l'exécution de cette fonction.
Et nous pouvons utiliser le module de temps pour le faire.
Je peux créer une chronologie variable pour le début et dire simplement l'heure.
J'exécute donc cette fonction de temps qui va commencer.
Un temps et dire, hé, ce temps initial va être un.
Et après cette fonction, notre fonction principale, longtemps est exécutée, je vais dire T deux et dire, hé, quelle
heure est-il ?
À l'heure actuelle.
Donc, cette fois, nous allons vérifier l'heure qu'il est maintenant, puis nous allons exécuter cette fonction, puis cette fois, nous allons
vérifier l'heure et quelle que soit la différence entre les deux, c'est le temps que cette partie
a pris.
Droit.
Donc, tout ce que nous faisons, c'est imprimer une chaîne F et dire qu'il a fallu T un moins T à.
D'accord, et cela renvoie en fait une milliseconde, donc je dirai simplement armer quatre millisecondes.
Et c'est tout.
J'ai enveloppé ma fonction avec juste cette pièce de temps supplémentaire, puis j'imprime dès que nous exécutons la fonction, combien de
temps cela a pris.
Alors vérifions-le.
Si j'exécute maintenant ma fonction de longue date ici et que je clique sur exécuter.
D'accord, j'obtiens un chiffre négatif parce que j'ai foiré ici.
Cela devrait être T deux moins T un, car le temps sur T un passe un certain temps, puis deux.
Donc, deux sera toujours plus grand que T un si je lance ceci.
D'accord, ça a pris le point un, six millisecondes, je pense que c'est en fait des secondes.
Maintenant, rendons cette fonction longue encore plus longue si je fais comme ça et que je clique sur Exécuter.
Oh, mon garçon, ça a pris un virgule neuf secondes.
Et si je le fais encore plus longtemps, si je clique sur exécuter et c'est la partie où je continue de parler jusqu'à ce que la
fonction s'exécute, car il va y avoir un silence gênant, sinon, j'espère que cela se terminera bientôt car je
n'ai rien d'autre à dire.
Allez, ça devient gênant.
D'accord.
Allez.
Oh mec.
Je vais avancer rapidement ici.
Oh, mon garçon, ça a pris 19 secondes.
C'est que c'est assez mauvais.
Mais j'ai maintenant ce décorateur que je peux donner à à peu près n'importe quelle fonction de mon programme et mesurer en fait les performances
de ma fonction assez utile, n'est-ce pas ?
Je pourrais avoir ce morceau de code.
Et avant, disons que je déploie mon code ou que je mets mon code dans le monde, je peux tester la performance de mes fonctions et
peut-être que je peux optimiser les choses de différentes manières.
Très, très utile.
Et je l'ai fait en seulement quelques lignes de code.
Neuf lignes de code.
Maintenant, remarquez que ce décorateur de performances dépend de la machine et de la vitesse à laquelle votre processeur et votre mémoire sont
sur votre ordinateur.
Donc, pour ce qui m'a pris 19 secondes, cela peut vous prendre beaucoup plus ou beaucoup moins selon votre machine.
Mais c'est un bon moyen de comparer les fonctions relativement.
J'espère donc qu'après cela, vous verrez que la puissance des décorateurs est beaucoup utilisée dans les bibliothèques et les
frameworks Python.
Les frameworks Web dont nous allons parler, comme Django et les décorateurs d'utilisation de flacons,
vous voulez peut-être avoir un décorateur d'authentification, donc vous vous authentifiez là où chaque fonction ne peut être exécutée.
Si l'utilisateur est authentifié.
Peut-être qu'ils ont le privilège d'exécuter une fonction telle que la connexion à un site Web.
Ou peut-être avez-vous simplement besoin d'une journalisation ou d'une journalisation.
Décorateur qui se contente de se connecter et de faire savoir à votre base de données que, hé, quelqu'un s'est connecté à votre système
ou, hé, quelqu'un a acheté quelque chose sur Amazon.
Ou, hé, quelqu'un vient de demander une demande d'ami, il y a tellement d'utilisations pour les décorateurs et le décorateur est
un sujet difficile.
Vous n'allez pas les voir partout dans le code Python.
Ce ne sont que des fonctionnalités supplémentaires que vous pouvez utiliser à mesure que vous vous familiarisez de plus en plus avec Python.
Mais j'espère qu'à la fin de cette salle, vous les comprendrez le moins pour peut-être un jour créer
les vôtres ou utiliser des bibliothèques et des frameworks pré-construits.
Je te verrai dans le prochain.
Au revoir.