Chiusure di Python

Chiusure di Python
Dobbiamo comprendere le funzioni nidificate e le variabili non locali prima di poter capire cos'è la chiusura di Python.

Le funzioni scritte in Python sono considerate oggetti di prima classe. Lo stato equivalente degli altri oggetti è dato alle funzioni in Python. Le funzioni possono essere create e distrutte dinamicamente, assegnate a variabili, salvate in collezioni, fornite come argomenti e altro ancora. Il termine "funzioni nidificate", a volte noto come "funzioni interne", si riferisce a funzioni definite all'interno delle altre funzioni.


È una funzione nidificata chiamata Build Message. La sua funzione principale esterna è dove è definita e chiamata.

Nella sua forma più elementare, la chiusura è solo una funzione nidificata che ha accesso a una variabile gratuita rimasta dopo che l'esecuzione di una funzione di allega è completa. Una chiusura di Python ha queste tre proprietà:

    • È nidificato nella funzione.
    • Può accedere a una variabile gratuita al di fuori del suo ambito.
    • La funzione circostante la restituisce.

Si dice che qualsiasi variabile che non sia legata all'ambito locale sia gratuito. La parola chiave non locale è richiesta affinché le chiusure funzionino con variabili immutabili come stringhe e numeri interi. Le chiusure di Python offrono una sorta di mascheramento dei dati e assistono a evitare l'uso di variabili globali.

Portata delle variabili

Dobbiamo anche conoscere l'ambito variabile Python per comprendere le chiusure in modo più completo. L'ambito è una tale regione in cui la variabile è osservabile. È possibile utilizzare solo l'intervallo specificato di una variabile. Secondo i tre diversi ambiti, le variabili possono spesso essere assegnate in tre posizioni separate:

    • Portata globale: Definizione di una variabile quando è al di fuori di tutte le funzioni. Qualsiasi funzione nel codice può facilmente utilizzare una variabile globale.
    • Portata locale: Una variabile è locale per una funzione quando viene dichiarata al suo interno. È possibile accedere a una variabile locale solo dall'interno dei confini di tale funzione in cui è dichiarata.
    • Portata non locale: Una variabile assegnata non è locale per le sue funzioni nidificate quando viene utilizzata nella funzione circostante. La funzione in cui è stata definita una variabile non locale e tutte le sue funzioni interne possono accedere a quella variabile.

Perché usare le chiusure?

I motivi principali per cui assumiamo decoratori sono delineati nel seguente elenco:

    • Il fatto che le chiusure di Python offrano una qualche forma di mascheramento dei dati come funzioni di callback è uno dei principali vantaggi di impiegarli. Di conseguenza, l'utilizzo delle variabili globali è ridotto
    • La dimensione del codice può essere ridotta in alcune circostanze utilizzando le chiusure anziché le classi.
    • Quando si sostituiscono le costanti con codifica dura, le chiusure sono un'ottima scelta.
    • La funzione decorativa delle chiusure è molto benefica.

Quando Python crea la chiusura?

Python crea un nuovo ambito ogni volta che viene invocata una funzione. Python produce inoltre una nuova chiusura se quella funzione ne produce una.


Crea una funzione denominata moltiplicatore che produce prima una chiusura. La moltiplicazione di due input è ciò che la funzione moltiplicatore restituisce. Ma utilizza una chiusura al posto. Aggiungi tre chiamate alla funzione moltiplicatore successiva. Tre chiusure vengono prodotte chiamando queste funzioni. Un numero viene moltiplicato per 2, 4 e 5 per ogni funzione. Quindi, eseguire le funzioni delle chiusure.

Esempio 1:

Per invocare una funzione interna dall'esterno della funzione esterna, dobbiamo prima capire come. Questi metodi possono restituire un valore. Qui, "T" e "U" sono variabili locali della funzione f ().


Poiché le variabili "T" e "U" non sono più accessibili dopo aver eseguito H = F (), tutte le variabili di F (Local) sono sparite. Tuttavia, manteniamo ancora il valore "t" che è stato restituito e salvato in H. Potremmo quindi essere in grado di far restituire la funzione esterna della funzione interna. Le funzioni di prima classe di Python lo rendono fattibile per questo. Implica che, poiché Python interpreta le funzioni come valori, puoi assegnarle alle variabili, fornire loro come argomenti di funzione o avere un'altra funzione restituirli.

Esempio 2:

Questo esempio mostra che la funzione interna "G" viene restituita dalla funzione esterna f (t).


La funzione g () viene ora restituita dall'espressione f (t). Assegnando il valore di "g" a "h" quando scriviamo h = f (i), "h" ora può essere considerato come "g" e prendere l'argomento di G. H (j) è equivalente a chiamare "g" di conseguenza (j).

Esempio 3:

La funzione g (), non un valore particolare di ciò, è ciò che f (t) restituisce. Prendi in considerazione questa istanza per questo e scrivi quanto segue:


Questo codice restituisce un errore. Significa che abbiamo riscontrato un errore. Non possiamo usare "H" per invocare una funzione poiché restituiamo il risultato di G (u) da f (t), che è un motivo per l'errore.

Esempio 4:

Non dobbiamo mantenere f (a) in "h". L'alternativa è chiamare f (a) direttamente (b). Considera la seguente illustrazione:


La necessità di fare la differenza tra f (a, b) e f (a) deve essere sempre tenuta a mente (b). Richiede due parametri per chiamare la funzione f (a, b). La funzione f (a) (b), d'altra parte, è una serie di funzioni nidificate, ognuna delle quali accetta solo un input. Conosciuta come una funzione unaria, questo tipo di funzione accetta solo un input. Di conseguenza, f (a) (b) è una serie di due funzioni uniche nidificate. Quindi, f (a) viene valutato per la prima volta. Per incatenare queste funzioni insieme, f (a) dovrebbe restituire una funzione. Qui, restituisce la funzione interna "G". Di conseguenza, f (a) (b) = g (b).

Esempio 5:

L'uso di una serie più lunga di funzioni Unary è semplicemente possibile estendendo l'approccio attuale. In questo caso anche le tre funzioni uniche nidificate. La prima funzione, f (t), ha una funzione al suo interno chiamata g (u) e g (u) ha una funzione al suo interno chiamata h (v). Ogni funzione interna viene restituita dalla sua funzione esterna.


Qui, definiamo le funzioni. Queste funzioni restituiscono i valori. Successivamente, inizializziamo tre variabili e assegniamo loro tre diversi numeri interi. Quindi, chiamiamo queste variabili gli attributi della funzione.

Esempio 6:

Supponiamo che ci siano alcune variabili non locali nella funzione esterna. vediamo cosa succede.


Eseguilo dimostra che funziona senza intoppi e che G (U) ha accesso sia a "T" che a "V". Tuttavia, come è persino concepibile? Ora che siamo al di fuori del Purview (T) di F, quindi "T" e "V" non dovrebbero essere raggiungibili dopo che F (T) viene eseguita. Perché G (u) è ancora in grado di accedervi? È per il motivo che G (u), la funzione interiore, è ora una chiusura.

Esempio 7:

Modifichiamo la funzione interna utilizzata in questa istanza.


Se ciò accade, non si può più dire che sia una chiusura. La spiegazione è che G (u) non accede alle variabili non locali "T" e "V". Quindi, G (u) non è tenuto a registrarli.

Esempio 8:

In questo caso, vedremo se impostiamo i valori di due parametri delle funzioni uguali, quindi quella funzione è impostata per essere una chiusura o no.


Ancora una volta, "T" è solo necessario per inizializzare "U" in questo caso. Pertanto, g (u) non è una chiusura perché "g" non ha bisogno di dichiarare "t".

Conclusione

In questa guida, abbiamo parlato della chiusura di Python. Abbiamo anche eseguito i diversi codici relativi a questo argomento. Richiediamo una funzione all'interno della chiusura per definire quanto segue:

    • La funzione esterna deve fornirla.
    • Alcune delle variabili non locali della funzione esterna dovrebbero essere catturate da esso. Queste variabili possono essere accessibili direttamente, dichiarate come variabili non locali o devono essere catturate da una chiusura nidificata.

In altre parole, una funzione e un ambito ampliato con variabili libere sono entrambi considerati chiusure. È necessario chiamare la funzione esterna per restituire la chiusura dopo aver dichiarato la chiusura per inizializzarla.