Scriviamo finalmente il nostro decoratore.
Ricorda, un decoratore potenzia la nostra funzione.
È semplicemente una funzione che racchiude un'altra funzione e la migliora o la modifica, ma il modo migliore per spiegare
di cosa si tratta è effettivamente codificare il nostro.
Quindi facciamolo.
Definiamo un mio.
Il decoratore e questo decoratore accetteranno subito una funzione, dovremmo sapere che questa è una
funzione di ordine superiore ora qui.
All'interno di qui, chiameremo la funzione, ma prima di farlo, avvolgeremo questa funzione
in un'altra funzione.
Quindi diremo definire la funzione wrap.
Quindi questo è solo un wrapper e questa funzione di wrap.
Sarà una funzione che esegue semplicemente questo funk e poi alla fine restituirà solo il wrap.
Funziona e nota qui che non lo sto chiamando, lo sto solo restituendo in modo che in seguito qualcuno possa
usarlo.
OK, ora diciamo che abbiamo una semplice funzione, ciao, e questa semplice funzione, solo prince.
Ciao, che funzione inutile.
Ora, perché è utile, perché ora posso usarlo come decoratore Python non appena scriviamo una A davanti a questo sta per dire,
ehi, questo sarà un decoratore e il decoratore, purché seguiamo può essere
utilizzata la sintassi di accettare una funzione, avere una funzione wrapper, chiamare la funzione
e restituire la funzione wrapper.
Quindi se faccio il mio decoratore, guarda come è tutto blu.
Ora, questo decoratore può essere effettivamente utilizzato in cima quando si definiscono le nostre funzioni, quindi se vogliamo usare il mio
decoratore sulla funzione ciao, lo usiamo in questo modo in modo che quando chiamo ciao nel mio programma.
Clicco, corro.
ti saluto.
Ok, so cosa stai pensando, stai pensando che sia una completa perdita di tempo, Andre.
Perché ho dovuto fare tutto questo?
Avrei potuto farlo solo per trovare il ciao.
E così è stato.
Sono così confuso.
Bene, ecco la cosa.
Quello che abbiamo appena fatto con l'arredatrice.
Non è cambiato nulla.
Funziona esattamente come previsto.
Ma ciò che ci consente di fare è che ora possiamo aggiungere funzionalità extra.
Ricorda come ho detto che il decoratore è una funzione come il mio decoratore che avvolge questo è qui un'altra funzione, che è
la funzione che passiamo.
E lo migliora, quindi come possiamo migliorare ciao?
Bene, possiamo fare qualsiasi cosa all'interno di questa funzione incapsulata, ad esempio, posso dire stampa e
poi stamperemo solo alcune stelle qui e forse stamperemo.
Un altro set di stelle qui, così quando chiamo Ron.
Boom, abbiamo appena potenziato il nostro saluto.
Funzione.
Quant'è fico?
Ed è per questo che i decoratori sono utili semplicemente aggiungendo questa riga, sono in grado di potenziare una funzione in modo
che diciamo che creo un'altra funzione chiamata.
Entro e questo acquisto verrà stampato.
Ci vediamo dopo.
Chiamando da qui e facendo clic su Esegui.
Bene, non cambia nulla, ma se volessi potenziarlo, proprio come l'hello, tutto ciò che devo fare
è copiare il decoratore e usarlo anche qui in modo che se lo eseguo.
Ci siamo, abbiamo potenziato il nostro.
Questo è il potere del decoratore semplicemente usando questa sintassi, posso aggiungere funzionalità extra ad altre
funzioni.
Ora, so cosa stai pensando e so anche che continuo a dirlo spesso, è come se potessi leggere nel pensiero,
ma.
Stai pensando che sia un sacco di magia, come fa l'interprete Python a fare tutto questo?
Sembra, beh, magico, giusto?
Sotto il cofano, tutto va bene, lascia che te lo mostri, in base a ciò che abbiamo imparato finora
sulle funzioni, perché sono cittadini di prima classe, giusto?
Tutto quello che stiamo facendo è letteralmente questo.
Diciamo variabile A.
Uguale a ciao.
E avvolgendo questo saluto e chiamandolo con il mio decoratore.
Quindi sto dicendo il mio decoratore.
E poi, corro così.
Quindi diciamo che questo è stato un saluto a bene, lo sto solo eseguendo.
Così.
Quindi se eseguo questo.
Tutto funziona ancora.
Tutto quello che sto facendo è avvolgere la mia funzione di saluto.
Con il mio decoratore e assegnandolo a una variabile.
Quindi, se andiamo passo dopo passo, vediamo che il mio decoratore riceve una funzione nel nostro caso
la funzione ciao, quindi restituisce questa funzione riavvolta che ha ciao qui.
Quindi restituiamo questa funzione di ratto.
Quindi ciao a ora è uguale a questa funzione incapsulata e quindi questa funzione incartata viene chiamata.
E come si chiama.
Beh, lo stampa, poi esegue la funzione ciao e poi lo stampa.
È come fare una cosa del genere.
Lo chiamiamo semplicemente di nuovo se eseguo questo.
Funziona, sembra strano, non è vero, ma dovrebbe avere un senso.
Chiamiamo la prima funzione e la prima funzione restituisce un'altra funzione e quindi chiamiamo la successiva
funzione restituita, che è la funzione rep.
Ora, il motivo per cui i decoratori sono utili è perché invece di fare questo e, francamente, sembrare confuso,
posso semplicemente aggiungere al mio decoratore e non abbiamo bisogno di fare tutto questo.
Ah, ciao.
Viene automaticamente avvolto dal mio decoratore.
Ma essenzialmente questo è ciò che sta facendo l'assegnato.
Vedi, niente di magico.
Ora, in questo momento, è carino, ma scommetto che ti stai ancora chiedendo perché i decoratori siano utili.
Quindi, per finalizzare davvero la nostra comprensione del decoratore, facciamo una pausa e ci vediamo nel
prossimo video.