Pitone

Tutorial sulle chiusure in Python

Tutorial sulle chiusure in Python
Una chiusura è un metodo o una funzione interna annidata che riconosce e ha il privilegio di utilizzare le variabili anche dopo che la funzione esterna ha terminato l'esecuzione nell'ambito locale in cui è stata creata. Una variabile deve provenire da una funzione o ambito esterno e non è certamente limitata nello spazio locale per essere utilizzata. Ci sono tre caratteristiche di una chiusura Python, queste sono le seguenti:

Funzione annidata

Devi prima capire cos'è un metodo annidato. Una funzione annidata può essere definita come un metodo specificato all'interno di un altro metodo. Le funzioni ricorsive possono raggiungere le variabili dell'ambito esterno. Per modificare le variabili non locali, le definiamo specificamente come non locali tramite parole chiave non locali perché sono per natura di sola lettura. Quindi, per prima cosa, dai un'occhiata alla funzione nidificata eseguita in Spyder Python 3.

Abbiamo definito due funzioni: quella esterna e quella interna. Nella funzione esterna, abbiamo dichiarato una variabile con un valore di testo al suo interno.

def external_func()
msg = 'Hy! Sono Aqsa Yasin'

Questa variabile è stata stampata nella funzione interna utilizzando un'istruzione print. Viene quindi restituita la funzione interna, che è una funzione annidata, e successivamente è stata chiamata la funzione esterna.

def funzione_interna()
stampa (messaggio)
return inner_func()
funzione_interna()

Se non usi la parola chiave return per restituire la funzione interna, restituirà comunque lo stesso risultato.

Quando esegui questo semplice codice, ti restituirà il testo, definito come il valore nella variabile 'messaggio'.

Uscita: Hy! Sono Aqsa Yasin

Ora definisci lo stesso tipo di funzione nidificata senza parola chiave di ritorno e variabile di passaggio 'messaggio' nel parametro e otterrai lo stesso output.

Output: Ciao

Funzione di chiusura semplice

Usa lo stesso codice, con una piccola modifica alle ultime due righe. Con la stringa 'Ciao', il mostra_msg() è stato invocato il metodo e il metodo restituito è stato legato alla parola 'un altro'. Durante la chiamata un altro(), il testo 'Ciao' è stato ancora ricordato, mentre il mostra_msg() il metodo era già stato eseguito in esecuzione. Assicurati di aggiungere la variabile 'messaggio' all'interno della funzione esterna.

Quando esegui questo codice, mostrerà che la funzione interna, che è a mostrare(), è stato assegnato alla variabile 'un altro'.

Produzione: .mostra a 0x0000020CCED4D820>

Puoi semplicemente stampare il nome di una funzione assegnata alla variabile 'un altro' come:

stampa (un altro).__nome__)

Verrà visualizzato il nome di una funzione.

Uscita: spettacolo

Ora, se vuoi eseguire questa variabile come una funzione, come altri metodi, puoi farlo aggiungendo parentesi e chiamandola in questo modo:

altro = show_msg("Ciao")
un altro()
un altro()

Puoi chiamarlo tutte le volte che vuoi.

Quando esegui questo codice, verrà visualizzato qualcosa del genere:

Produzione:

Ciao

Ciao

Ciao

Ora puoi vedere che anche dopo aver terminato l'esecuzione della funzione esterna, la funzione interna ricorda ancora le variabili e altre cose che sono state create o definite nello spazio locale.

Funzione di chiusura tramite parametri

Ora, abbiamo aggiunto parametri mentre passiamo una variabile nella funzione esterna come:

def mostra_msg(msg)

Il valore passato al parametro della funzione esterna verrà assegnato a una variabile definita all'interno di questa funzione esterna come:

Messaggio = msg

Passa alcuni valori stringa nelle variabili appena create nell'ultima riga, come:

func1 = show_msg('Ciao')
func2 = show_msg('Ciao')

Ora devi chiamare queste funzioni in questo modo:

funzione1()
funzione2()

Otterrai il seguente output mostrato nell'immagine dell'editor spyder:

All'interno di Python, questo processo, mediante il quale qualsiasi dato (Hi o Hello per questo scenario) viene allegato allo script, è denominato Closure.

Moltiplicazione semplice usando Python Closure

Abbiamo definito due funzioni. Uno è esterno, che ha un moltiplicatore definito, e l'interno in cui verrà passato il valore durante la chiamata alla funzione. Nella funzione esterna, abbiamo dichiarato una variabile con un valore moltiplicatore definito passato in essa. Questo valore moltiplicatore 'n' è stato moltiplicato con un certo valore 'X' che viene passato nell'istruzione print alla funzione interna. Viene quindi restituita la funzione interna, che è una funzione nidificata, e successivamente le variabili sono state chiamate una dopo l'altra nelle istruzioni print.

def out_multiply(n):
def in_multiply(x):
restituire x * n
return in_multiply

Ora la nuova variabile ha assegnato un valore da passare nel parametro della funzione esterna. Questo valore verrà salvato nella variabile 'n', che è un moltiplicatore definito nella funzione esterna:

volte3 = out_multiply(3)
volte5 = out_multiply(5)

A queste variabili verranno assegnati più valori, che verranno salvati nel 'X' variabile definita nella funzione interna che deve essere moltiplicata per moltiplicatore 'n'. Quando stampiamo la variabile denominata 'times', una funzione con un valore intero 'X' assegnato tra parentesi lo farà moltiplicare per il valore della funzione esterna 'n'.

Il primo lo farà uscita 27 durante l'esecuzione dell'istruzione print perché variabile 'n' ha 3 come moltiplicatore, e abbiamo dato 9 come un altro intero da moltiplicare.

stampa(time3(9))

Il secondo lo farà uscita 15 durante l'esecuzione dell'istruzione print perché variabile 'n' ha 3 come moltiplicatore, e abbiamo dato 5 come un altro intero da moltiplicare.

stampa(time5(3))

L'ultimo lo farà uscita 30 durante l'esecuzione di un'istruzione print perché ha chiamato ricorsivamente times to function variable. La prima volta, i tempi hanno 'n' avendo 3 come moltiplicatore, che sarà moltiplicato per intero 2. Alla moltiplicazione, uscirà 6. Ora, questo 6 verrà utilizzato come valore, quindi passato come argomento alla funzione variabile dei tempi, dove 'n' il moltiplicatore variabile è 5. Cosi quando 5 viene moltiplicato per 6 uscirà 30.

print(time5(time3(2)))

Puoi vedere l'output nella console dell'editor Spyder.

Conclusione

Le chiusure possono impedire l'utilizzo di valori globali e avere una forma di occultamento dei dati. Potrebbe anche fornire un approccio al problema orientato agli oggetti o alle entità. Si spera che, dopo aver seguito questa guida, sarai in grado di acquisire i fondamenti della chiusura di Python.

Installa l'ultimo gioco di strategia OpenRA su Ubuntu Linux
OpenRA è un motore di gioco di strategia in tempo reale gratuito/libero che ricrea i primi giochi di Westwood come il classico Command & Conquer: Red ...
Installa l'ultimo Dolphin Emulator per Gamecube e Wii su Linux
L'emulatore Dolphin ti consente di giocare ai giochi Gamecube e Wii scelti su Personal Computer Linux (PC). Essendo un emulatore di giochi liberament...
Come utilizzare GameConqueror Cheat Engine in Linux
L'articolo copre una guida sull'utilizzo del motore cheat GameConqueror in Linux. Molti utenti che giocano su Windows utilizzano spesso l'applicazione...