Chiusure
Scorri per mostrare il menu
Closure vs. Funzioni annidate
Una funzione annidata è qualsiasi funzione definita all'interno di un'altra funzione. Le funzioni annidate sono utili per organizzare il codice e limitare l'ambito delle funzioni di supporto. Tuttavia, non tutte le funzioni annidate sono closure.
Una closure è un tipo speciale di funzione annidata. Le closure sono funzioni annidate che "ricordano" e possono accedere alle variabili dell'ambito della funzione esterna, anche dopo che la funzione esterna ha terminato l'esecuzione. Questo significa che le closure possono mantenere uno stato tra più chiamate.
Punti chiave:
- Tutte le closure sono funzioni annidate;
- Non tutte le funzioni annidate sono closure;
- Una funzione annidata diventa una closure solo se utilizza variabili dell'ambito della funzione esterna e tali variabili sono ancora accessibili dopo che la funzione esterna è stata restituita.
Questa distinzione è importante per comprendere come Python gestisce l'ambito delle variabili e come è possibile utilizzare le closure per incapsulare insieme stato e comportamento.
12345678910def make_greeter(name): def greet(): return f"Hello, {name}!" return greet greeter = make_greeter("Alice") print(greeter()) another_greeter = make_greeter("Bob") print(another_greeter())
Quando si chiama make_greeter("Alice"), Python crea una nuova funzione greet che ricorda il valore di name come "Alice". Anche se make_greeter termina l'esecuzione, la funzione greet restituita ha ancora accesso alla variabile name dal suo ambito originale. Questo è il motivo per cui chiamando greeter() viene stampato Hello, Alice! e chiamando another_greeter() viene stampato Hello, Bob!. Ogni closure mantiene una propria copia delle variabili di cui ha bisogno.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione