Scope delle variabili
Cos’è lo scope?
Sezione intitolata “Cos’è lo scope?”Una variabile x definita dentro una funzione esiste solo in quella funzione. Fuori da lì non è accessibile.
Questa zona del programma si chiama scope (o “ambito”).
Variabili locali: dentro la funzione
Sezione intitolata “Variabili locali: dentro la funzione”Una variabile creata dentro una funzione è locale: esiste durante l’esecuzione della funzione e non è accessibile fuori dal suo scope.
def mia_funzione(): x = 10 # variabile locale: esiste solo dentro questa funzione print(x)
mia_funzione() # 10# print(x) # NameError: 'x' non esiste qui fuori!È un comportamento voluto: le funzioni restano indipendenti e le loro variabili non interferiscono con quelle esterne.
Variabili globali: fuori dalle funzioni
Sezione intitolata “Variabili globali: fuori dalle funzioni”Una variabile definita fuori da ogni funzione è globale: può essere letta dalla parte principale del programma e dalle funzioni, salvo variabili locali con lo stesso nome.
nome = "Alice" # variabile globale
def saluta(): print(f"Ciao, {nome}!") # può leggere la variabile globale
saluta() # Ciao, Alice!Puoi leggere le variabili globali, ma non modificarle (di solito)
Sezione intitolata “Puoi leggere le variabili globali, ma non modificarle (di solito)”Una funzione può leggere una variabile globale. Se assegna un nuovo valore allo stesso nome, però, Python lo considera locale:
contatore = 0
def incrementa(): contatore = 1 # ATTENZIONE: crea una variabile locale, non modifica quella globale! print(f"Dentro la funzione: {contatore}")
incrementa()print(f"Fuori dalla funzione: {contatore}") # ancora 0, non è cambiato!Per modificare la variabile globale dall’interno della funzione devi usare global:
contatore = 0
def incrementa(): global contatore # ora si riferisce alla variabile globale contatore += 1
incrementa()incrementa()print(contatore) # 2Variabili con lo stesso nome a livelli diversi
Sezione intitolata “Variabili con lo stesso nome a livelli diversi”Se hai una variabile locale e una globale con lo stesso nome, dentro la funzione vince quella locale:
x = "globale"
def funzione(): x = "locale" print(x) # locale: la variabile locale ha la precedenza
funzione()print(x) # globale: fuori dalla funzione, x è ancora quella globaleNon vengono confuse: sono due variabili separate che condividono solo il nome.
Le funzioni predefinite di Python
Sezione intitolata “Le funzioni predefinite di Python”Funzioni come print, len, range, input sono sempre disponibili ovunque nel codice. Python le cerca per ultime, ma le trova sempre.
Per questo non dovresti mai chiamare una tua variabile print o list: sovrascriveresti la funzione predefinita e poi non potresti più usarla!
# Da non fare mai!# list = [1, 2, 3]: ora non puoi più usare list() come funzione# print = "ciao": ora print() non funziona più!