Decoratori a Python

Decoratori a Python
I decoratori di Python sono una caratteristica estremamente utile in quanto consentono ai programmatori di personalizzare come si comporta un metodo o una classe. I decoratori ci consentono di incapsulare un'altra funzione per modificare temporaneamente la sua funzionalità estendendo la funzionalità del metodo avvolto. Comprendiamo dapprima alcuni concetti che sarebbero utili mentre imparano a conoscere i decoratori prima di entrare troppo profondamente in essi.

Quando utilizzare un decoratore Python

Ogni volta che vuoi modificare il comportamento di una funzione senza cambiare il metodo stesso, utilizzerai un decoratore. L'aggiunta di registri, l'analisi delle prestazioni, l'esecuzione della memorizzazione nella cache, la conferma dell'autorizzazione e altre attività sono alcuni esempi notevoli. Ogni volta che è necessario eseguire un codice identico su molti processi, è possibile, tuttavia, utilizzarne uno. Di conseguenza non dovrai scrivere i programmi duplicati.

Prerequisiti per comprendere i decoratori

Dobbiamo capire prima alcuni concetti fondamentali di Python prima di conoscere i decoratori.

    • Le funzioni possono essere impiegate o fornite come parametri in Python perché si comportano come classi e oggetti.
    • Un elemento del tipo di oggetto è una funzione.
    • La funzione potrebbe essere trattenuta in una variabile.
    • La funzione è usata come argomento in un'altra funzione.
    • Gli utenti possono restituire un altro metodo da una funzione.
    • Potrebbero essere mantenuti in strutture di dati come array e tabelle hash.

Per una buona comprensione, considera le seguenti istanze:

Esempio 1:

Tratteremo le funzioni come oggetti in questo caso. Daremo una variabile al metodo SHOUT. Questo genera un secondo nome, urla che punta all'oggetto funzione specificato dal metodo di grido ma non chiama la funzione.


All'inizio del programma, definiamo la funzione shout (). Qui, passiamo l'attributo "t" come parametro della funzione shout (). Questa funzione restituisce il testo nel formato superiore. Usiamo la funzione superiore (). Quindi, chiamiamo il metodo Print () per visualizzare la linea. All'interno di questa funzione, chiamiamo la funzione shout (). Forniamo il testo che vogliamo apparire sullo schermo come output. Impostiamo il valore della funzione shout () uguale alla funzione yell (). Nell'ultima riga, stampiamo il valore del metodo Yell in modo che applichiamo il metodo Print (). Qui, specifichiamo anche il valore del "buongiorno" come argomento della funzione Yell ().

Esempio 2:

Forniremo il metodo a un'altra funzione come parametro. Qui, il metodo di saluto accetta una seconda funzione come argomento (SHOUT e WHISPER). La funzione di saluto chiama quindi altre funzioni definite che sono state specificate come input.


La funzione shout () è definita all'inizio del programma. Qui, l'argomento per la funzione SHOUT è l'elemento "t". Questo restituisce il testo in maiuscolo perché abbiamo utilizzato la funzione superiore (). Il metodo Whisper () è definito nel passaggio seguente. Questa funzione emette il testo che è stato approvato come argomento nel formato inferiore. Il metodo Greet () è ora utilizzato. Qui, forniamo il parametro "func" definito nella riga seguente. Specifichiamo il valore dell'attributo "func" che dobbiamo rappresentare sulla console. Infine, utilizziamo la funzione print () per mostrare i valori dei metodi SHOUT e WHISPER.


Le istanze precedentemente menzionate mostrano i principali concetti necessari per comprendere i decoratori. Ora eseguiremo alcuni casi per dimostrare l'uso dei decoratori.

Decoratori

Come è già stato detto, i decoratori possono essere utilizzati per cambiare comportamento di una funzione o di classe. Le funzioni sono definite all'interno della funzione wrapper quando si utilizzano decoratori, dove vengono passate come parametri ad altre funzioni.

Esempio 3:

Questa illustrazione può illustrare come un decoratore altera il comportamento di una funzione.


Prima di tutto, definiamo il decoratore. Successivamente, chiamiamo la funzione Inner1 (). È un metodo wrapper in cui si chiama il parametro. All'interno di questa funzione, utilizziamo la funzione print (). Quindi, chiamiamo la funzione effettiva all'interno della funzione wrapper. Utilizziamo di nuovo il metodo Print ().nella riga successiva. Definiamo un metodo Fun_use () da chiamare all'interno del wrapper. Ora, passiamo il "divertimento" all'interno del decoratore per modificarne il comportamento. Per terminare il codice, invochiamo il metodo.

Esempio 4:

Passiamo a un'istanza diversa in cui possiamo determinare per quanto tempo impiega una funzione per eseguire utilizzando un decoratore.


Qui, importiamo i file di intestazione richiesti che includono tempo e matematica. La libreria "Time" è responsabile del calcolo del modulo "Time" e il modulo "Math" è responsabile di tutte le operazioni matematiche. Utilizziamo un decoratore per calcolare la durata presa dalla funzione. Definiamo il metodo cal_time (). Questa funzione contiene qualsiasi funzione richiesta come parametro. Impieghiamo la funzione Inner1 (). Forniamo i *args e ** kwargs come argomenti della funzione. Nel passaggio successivo, archiviamo la durata prima di implementare la funzione. Chiamiamo il metodo Time () associato al modulo "Time". Quindi, acquisiamo il tempo dopo l'esecuzione del metodo. Utilizziamo nuovamente la funzione time () e il suo valore viene salvato nella variabile "fine".

Il metodo Print () viene applicato per mostrare il tempo calcolato. Ora calcoliamo il fattoriale, quindi definiamo il metodo fattoriale (). Passiamo il numero specifico come parametro. Abbiamo impostato un valore di 3 secondi per la funzione sleep () perché ci vuole pochissimo tempo in modo da poter notare la differenza effettiva. La funzione print () viene utilizzata per visualizzare il fattoriale del numero. Alla fine, invochiamo il fattoriale fornendo il numero di cui vogliamo calcolare il fattoriale.

Conclusione

In questa guida, abbiamo discusso di come fornire una funzione a una variabile, come trattare le funzioni come oggetti, come restituire le funzioni e come fornire una funzione come parametro a qualche altra funzione. Insieme a diversi casi, abbiamo anche dimostrato come costruire e utilizzare i decoratori Python. Abbiamo implementato il codice che impiega i decoratori per modificare il comportamento di una funzione. E in un'altra illustrazione, abbiamo usato un decoratore per determinare per quanto tempo impiega una funzione.