Funzione nidificata:
Una funzione nidificata è definita all'interno di un'altra funzione. Queste funzioni possono accedere a una variabile della funzione esterna. La variabile non locale che possiamo accedere nel loro ambito.
Ex:
defouter_fun (s):Produzione:
Nell'esempio sopra, Inner_fun è una funzione nidificata e MSG è una variabile non locale. Possiamo accedervi all'interno del corpo esterno_fun.
Definizione di chiusura:
La chiusura di Python è una funzione nidificata. Possiamo accedere alla variabile al di fuori dell'ambito. Questo concetto è essenziale per comprendere i decoratori di pitone.
Tutte le funzioni nidificate non sono chiusure. I seguenti tre criteri dovrebbero soddisfare per definire una chiusura:
Ex:
#Defining funzioni nidificateProduzione:
Nell'esempio sopra, il sagry_msg è la funzione esterna. Questo crea una funzione interiore (Glead_MSG è la chiusura qui) e viene restituita.
La funzione esterna GLEE_MSG restituisce una funzione print_msg ed è assegnata alla variabile Call_Fun. Qui vediamo che la funzione esterna ha terminato la sua esecuzione, ma possiamo ancora accedere alla variabile MSG.
Come modificare la variabile all'interno della chiusura:
Utilizzando la parola chiave non locale possiamo modificare la variabile all'interno della funzione interna.
Ex: Senza usare la parola chiave non locale. Qui stiamo cercando di modificare la variabile NUM all'interno della chiusura e ottenuto illegalerror perché Python pensa che Num come una variabile locale e NUM non sia definito all'interno di Fun ().
defGenerate_num ():Produzione:
Ex: Con l'uso non locale parola chiave. Nell'esempio seguente usando la parola chiave non locale saremo in grado di modificare la variabile NUM.
defGenerate_num ():Produzione:
Scriveremo più esempio usando una chiusura:
Ex: Questo stamperà gli argomenti passati e il nome della funzione
Defouter (Func):Produzione:
Ex: Nell'esempio seguente, ogni volta che viene chiamata la chiusura, i valori verranno aggiunti a un elenco e aggiungeranno tutti i valori nell'elenco, quindi restituire un valore.
defadddition ():Produzione:
Ex: In questo esempio moltiplica il parametro del parametro della funzione interna per parametro della funzione esterna
def multiply_by_number (m):
Produzione:
Conclusione:
La chiusura di Python è una funzione nidificata. Con questo, possiamo evitare di usare variabili globali usando variabili non locali. Ciò fornisce alcuni dati che nascondono e comprendono questo concetto utili nella costruzione di un decoratore Python.