Allora parliamo di alcune applicazioni pratiche dei decoratori, insomma, le abbiamo già viste a
lezione, no?
Abbiamo visto come il metodo di classe e il metodo statico sono stati in grado di creare metodi di classe e metodi statici sulla classe
che la classe diretta può utilizzare.
E se non li ricordi, torna a quei video.
Ma voglio mostrarti uno dei miei esempi preferiti di decoratore, creeremo il nostro.
Quello che faremo è che voglio avere una performance.
Decorator e comunque, questo decoratore non esiste in Python, lo costruiremo da zero.
Quello che voglio fare è essere in grado di avere un decoratore di prestazioni che posso usare durante il test del mio codice per vedere quanto
velocemente viene eseguito il mio codice.
Ad esempio, se avessi una funzione, diciamo che richiede molto tempo.
Bene, molto tempo per completare, quindi farò un ciclo davvero lungo e dirò per I nel raggio di, diciamo.
Tutti questi numeri, e farò solo un calcolo casuale, io per cinque.
Questa funzione, voglio sapere quanto funziona bene, quanti millisecondi ci vogliono per completarla, quindi come
possiamo costruirla?
Per prima cosa, farò qualcosa di cui non abbiamo ancora parlato, qualcosa
sui moduli nei moduli integrati, quindi per ora non ne parleremo
troppo, ma andremo per importare dal modulo time qualcosa chiamato double time.
Di nuovo, qualcosa di cui parleremo nella sezione modulo del corso, sto essenzialmente dicendo, ehi,
quando ho installato Python o nel mio caso quando sto usando questo Reppel, ha accesso a questa volta se ho
chiesto per questo.
E in questo caso, sto dicendo, ehi, voglio usare questo oggetto o modulo temporale che ottengo da Python.
E qui creeremo il nostro decoratore seguendo lo schema che abbiamo imparato.
Dirò che definire prestazioni e prestazioni accetterà una funzione proprio come abbiamo visto prima.
E qui dentro avremo il nostro involucro.
Quindi diciamo la funzione wrapper e la funzione wrapper.
Se ricordi, sarà flessibile prendendo archi di stelle e archi di parole chiave stella stella.
In modo che possiamo passargli tutti i parametri che vogliamo, perché non sappiamo come questa funzione, quanti parametri avrà e
voglio essere in grado di utilizzare le prestazioni su tutte le mie funzioni.
Ora, prima qui dentro, quello che faremo è avere il risultato della funzione.
Essere il.
Funzione che riceviamo proprio qui e poi diciamo semplicemente.
Esegui la funzione con archi di parole chiave stella e stella stella.
E infine, alla fine di questo, voglio restituire i risultati.
E poi finalmente, restituiremo il rapper, quindi niente che non abbiamo visto prima, avrei potuto semplicemente tornare qui o semplicemente
eseguire la funzione, ma ti mostrerò perché l'ho fatto in questo modo in un secondo .
In questo momento, la nostra funzione in realtà non fa nulla.
Se clicco, corro.
Bene, non succede nulla se faccio molto tempo ed eseguo questa funzione.
Ci è voluto molto tempo per l'esecuzione, ma questo è tutto, non succede nulla.
Questo è quando rendiamo le cose interessanti.
Vogliamo calcolare dall'inizio dell'esecuzione di questa funzione alla fine dell'esecuzione di questa funzione.
E possiamo usare il modulo del tempo per farlo.
Posso creare una sequenza temporale variabile per l'inizio e dire semplicemente l'ora.
Quindi sto eseguendo questa funzione temporale che inizierà.
Una volta e dire, ehi, questa prima volta sarà una.
E dopo questa funzione, la nostra funzione principale, molto tempo viene eseguito, dirò T due e dirò, ehi,
che ore sono?
Proprio adesso.
Quindi questa volta controlleremo che ora è adesso e poi eseguiremo questa funzione e poi questa volta controllerà
l'ora e la differenza che c'è tra questi due è quanto tempo ha impiegato
questa parte.
Destra.
Quindi tutto ciò che facciamo è dire di stampare una stringa F e dire che ci sono voluti T uno meno T per.
Giusto, e questo in realtà restituisce un millisecondo, quindi dirò solo braccia quattro millisecondi.
E questo è tutto.
Ho racchiuso la mia funzione solo con questo pezzo di tempo extra, e poi sto stampando non appena eseguiamo la funzione, quanto
tempo ci è voluto.
Quindi diamo un'occhiata.
Se ora eseguo la mia funzione a lungo termine proprio qui e faccio clic su Esegui.
Va bene, ho un numero negativo perché ho sbagliato qui.
Questo dovrebbe essere T due meno T uno, perché il tempo su T uno passa un po' di tempo e poi due.
Quindi due sarà sempre maggiore di T uno se eseguo questo.
Va bene, ci sono voluti il punto uno, sei millisecondi, penso che in realtà siano secondi.
Ora, rendiamo questa lunga funzione ancora più lunga se faccio così e faccio clic su Esegui.
Oh, cavolo, ci sono voluti uno virgola nove secondi.
E se lo faccio ancora più lungo, se clicco su Esegui e questa è la parte in cui continuo a parlare fino all'esecuzione
della funzione, perché ci sarà un silenzio imbarazzante, altrimenti, spero che questo finisca presto perché non
ho altro di cui parlare.
Dai, sta diventando imbarazzante.
Va bene.
Avanti.
Oh ragazzo.
Sto andando avanti veloce attraverso qui.
Oh, cavolo, ci sono voluti 19 secondi.
È piuttosto brutto.
Ma ora ho questo decoratore che posso dare a praticamente qualsiasi funzione nel mio programma e misurare effettivamente le prestazioni
della mia funzione piuttosto utile, giusto?
Potrei avere questo pezzo di codice.
E prima di dire che distribuisco il mio codice o metto il mio codice nel mondo, posso testare quanto sono performanti le mie
funzioni e forse posso ottimizzare le cose in modi diversi.
Molto, molto utile.
E l'ho fatto in poche righe di codice.
Nove righe di codice.
Ora, attenzione, questo decoratore di prestazioni dipende dalla macchina e dalla velocità della CPU e della memoria
sul computer.
Quindi per quelli che mi ci sono voluti 19 secondi potresti impiegare molto di più o molto meno a seconda della tua macchina.
Ma questo è un bel modo per confrontare le funzioni in modo relativo.
Quindi spero che dopo questo, vedrai che il potere del decoratore del decoratore è usato molto nelle librerie e nei
framework Python.
I framework Web di cui parleremo, come Django e flask usano i decoratori, forse
vuoi avere un decoratore di autenticazione, quindi fai l'autenticazione in cui ogni funzione può essere eseguita solo.
Se l'utente è autenticato.
Forse hanno il privilegio di eseguire una funzione come l'accesso a un sito Web.
O forse hai solo bisogno di una registrazione o registrazione.
Decoratore che registra e fa sapere al tuo database che, ehi, qualcuno ha effettuato l'accesso al tuo sistema o,
ehi, qualcuno ha acquistato qualcosa da Amazon.
Oppure, ehi, qualcuno ha appena richiesto una richiesta di amicizia, ci sono così tanti usi per i decoratori e il decoratore è
un argomento difficile.
Non li vedrai in tutto il codice Python.
Sono solo una funzionalità extra che puoi usare man mano che ti senti sempre più a tuo agio con Python.
Ma spero che entro la fine di questa sala, li capirai meno per forse un giorno costruirne uno
tuo o usare quelli pre-costruiti da librerie e framework.
Ci vediamo alla prossima.
Ciao.