Scope Delle Variabili
Scope delle Variabili in Python¶
Obiettivi della Lezione¶
Al termine di questa lezione, sarai in grado di:
- Comprendere il concetto di scope (ambito) delle variabili in Python.
- Distinguere tra variabili locali e globali.
- Utilizzare le parole chiave
global
enonlocal
. - Evitare errori comuni legati allo scope delle variabili.
Introduzione¶
In Python, come in molti linguaggi di programmazione, le variabili hanno un “ambito” o scope che determina dove possono essere utilizzate all’interno del codice. Comprendere lo scope delle variabili è fondamentale per scrivere codice efficace, evitare conflitti di nomi e prevenire bug difficili da individuare.
Spiegazione Teorica¶
Cosa si intende per Scope?¶
Lo scope di una variabile è la regione del programma in cui la variabile è riconosciuta e può essere utilizzata. In Python, lo scope è determinato da dove la variabile viene dichiarata e definisce la visibilità di quella variabile.
Tipi di Scope in Python¶
- Scope Locale: Variabili definite all’interno di una funzione. Sono accessibili solo all’interno di quella funzione.
- Scope Globale: Variabili definite all’esterno di tutte le funzioni. Sono accessibili ovunque nel file.
- Scope Innestato: Variabili definite nelle funzioni interne (nested functions). Usano la parola chiave
nonlocal
. - Scope Built-in: Nominali predefiniti di Python che sono sempre disponibili.
Ordine di Risoluzione delle Variabili: LEGB¶
Python segue la regola LEGB per risolvere le variabili:
- Local
- Enclosing (chiusura)
- Global
- Built-in
# Variabile globale
x = "Sono una variabile globale"
def funzione():
# Variabile locale
y = "Sono una variabile locale"
print(x) # Accesso alla variabile globale
print(y) # Accesso alla variabile locale
funzione()
Sono una variabile globale Sono una variabile locale
# Proviamo ad accedere a y al di fuori della funzione
print(y) # Genererà un errore NameError
--------------------------------------------------------------------------- NameError Traceback (most recent call last) Cell In[3], line 2 1 # Proviamo ad accedere a y al di fuori della funzione ----> 2 print(y) NameError: name 'y' is not defined
x = "Variabile globale"
def funzione():
global x
x = "Modificato all'interno della funzione"
print(x)
funzione()
print(x)
Modificato all'interno della funzione Modificato all'interno della funzione
def esterna():
x = "Variabile esterna"
def interna():
nonlocal x
x = "Variabile interna"
print("Dentro interna:", x)
interna()
print("Dentro esterna:", x)
esterna()
Dentro interna: Variabile interna Dentro esterna: Variabile interna
count = 0
def incrementa():
global count
count += 1
incrementa()
print(count) # Output atteso: 1
1
Esercizio 2: Utilizzo di nonlocal
¶
Scrivi una funzione esterna
che contiene una funzione interna
. La funzione interna dovrebbe modificare una variabile definita in esterna
utilizzando nonlocal
.
Soluzione:
def esterna():
messaggio = "Ciao"
def interna():
nonlocal messaggio
messaggio = "Arrivederci"
interna()
print(messaggio) # Output atteso: Arrivederci
esterna()
Arrivederci
Buone Pratiche e Consigli¶
- Evitare l’Abuso di Variabili Globali: Le variabili globali possono rendere il codice difficile da mantenere e debugare. Utilizzale con parsimonia.
- Chiarezza dei Nomi: Usa nomi significativi per le variabili per evitare conflitti e facilitare la leggibilità.
- Capsula delle Variabili: Mantieni le variabili il più possibile locali. Questo riduce il rischio di effetti collaterali indesiderati.
- Documenta il Codice: Aggiungi commenti per spiegare l’utilizzo di
global
ononlocal
quando necessario.
Conclusione¶
Lo scope delle variabili è un concetto cruciale in Python che influisce sulla struttura e sul funzionamento del tuo codice. Comprendere come e dove le variabili possono essere accessibili ti aiuta a scrivere codice più pulito, efficiente e meno incline a errori. Ricorda sempre di considerare lo scope quando definisci e modifichi le variabili nelle tue funzioni.
Risorse Aggiuntive¶
- Documentazione Ufficiale Python: Documentazione Ufficiale Python
- Libro Consigliato: Python Crash Course di Eric Matthes
- Video Tutorial: Variable Scope – Understanding the LEGB rule and global/nonlocal statements