In Python le variabili svolgono un ruolo chiave nella memorizzazione e nella gestione dei dati. Il loro comportamento e la loro accessibilità dipendono da dove sono definiti nel programma. In questo articolo esploreremo le variabili globali e locali, come funzionano e gli scenari comuni con esempi.
Variabili locali
Le variabili locali vengono create all'interno di una funzione ed esistono solo durante la sua esecuzione. Non è possibile accedervi dall'esterno della funzione.
dimensioni dei caratteri in lattice
Esempio 1: In questo codice stiamo creando e accedendo a una variabile locale all'interno di una funzione.
Pythondef greet(): msg = 'Hello from inside the function!' print(msg) greet()
Produzione
Hello from inside the function!
Spiegazione: Definiamo salutare() con una variabile locale msg e stamparlo. Poiché msg esiste solo durante l'esecuzione della funzione, è possibile accedervi all'interno della funzione. Chiamando salutare() visualizza il messaggio.
Esempio 2 : In questo esempio stiamo creando una variabile locale all'interno di una funzione e quindi tentando di accedervi all'esterno della funzione, causando un errore.
Python
def greet(): msg = 'Hello!' print('Inside function:' msg) greet() print('Outside function:' msg)
Produzione
Traceback (ultima chiamata per ultima):
File '/home/guest/sandbox/Solution.py' riga 6 pollici
print('Funzione esterna:' msg)
NameError: il nome 'msg' non è definito
Spiegazione: msg è una variabile locale interna salutare() ed è possibile accedervi solo da lì. Stamparlo all'esterno provoca un errore perché non esiste a livello globale.
Variabili globali
Le variabili globali vengono dichiarate all'esterno di tutte le funzioni ed è possibile accedervi ovunque nel programma, comprese le funzioni interne.
In questo esempio stiamo creando una variabile globale e quindi accedendovi sia all'interno che all'esterno di una funzione.
Pythonmsg = 'Python is awesome!' def display(): print('Inside function:' msg) display() print('Outside function:' msg)
Produzione
Inside function: Python is awesome! Outside function: Python is awesome!
Spiegazione: msg è una variabile globale accessibile sia all'interno che all'esterno di display() funzione. Chiamando display() stampa il globale msg e stampa msg al di fuori della funzione funziona come previsto.
Nota: Se una variabile non viene trovata all'interno di una funzione (ambito locale) Python la cerca automaticamente nell'ambito globale. Tuttavia, se una variabile locale ha lo stesso nome di una globale, oscurerà la variabile globale all'interno di quella funzione.
Utilizzo di variabili Locali e Globali
Se una variabile è definita sia globalmente che localmente con lo stesso nome, la variabile locale oscura la variabile globale all'interno della funzione. Le modifiche alla variabile locale non influiscono sulla variabile globale a meno che non si dichiari esplicitamente la variabile come globale.
Pythondef fun(): s = 'Me too.' print(s) s = 'I love Geeksforgeeks' fun() print(s)
Produzione
Me too. I love Geeksforgeeks
Spiegazione: Dentro divertimento() S è una variabile locale impostata su "Anch'io". e stampa quel valore. Fuori dal globale S rimane 'I love Geeksforgeeks' quindi stampa S successivamente mostra il valore globale.
Modifica delle variabili globali all'interno di una funzione
Per impostazione predefinita non è possibile modificare una variabile globale all'interno di una funzione senza dichiararla come globale. Se provi Python genererà un errore perché tratta la variabile come locale. Per modificare una variabile globale utilizzare il comando parola chiave globale .
Senza globale (causa errore)
Pythondef fun(): s += ' GFG' # Error: Python thinks s is local print(s) s = 'I love GeeksforGeeks' fun()
Produzione
UnboundLocalError: variabile locale "s" a cui si fa riferimento prima dell'assegnazione
Spiegazione: Inside fun() Python presuppone che s sia locale poiché proviamo a modificarlo. Ma non esistono locali prima di quella riga, quindi si verifica un errore.
Con globale (funziona correttamente)
Pythons = 'Python is great!' def fun(): global s s += ' GFG' # Modify global variable print(s) s = 'Look for GeeksforGeeks Python Section' # Reassign global print(s) fun() print(s)
Produzione
Python is great! GFG Look for GeeksforGeeks Python Section Look for GeeksforGeeks Python Section
Spiegazione:
- Dichiarare s come globale dice a Python di utilizzare la variabile dall'ambito globale.
- La funzione prima aggiunge "GFG" quindi riassegna s.
- Le modifiche persistono al di fuori della funzione.
Globale vs locale con lo stesso nome
Pythona = 1 # Global variable def f(): print('f():' a) # Uses global a def g(): a = 2 # Local shadows global print('g():' a) def h(): global a a = 3 # Modifies global a print('h():' a) print('global:' a) f() print('global:' a) g() print('global:' a) h() print('global:' a)
Produzione
global: 1 f(): 1 global: 1 g(): 2 global: 1 h(): 3 global: 3
Spiegazione:
- f() stampa una a globale senza modificarla.
- g() crea un locale a lasciando intatto quello globale.
- h() dichiara a come globale e lo modifica.
Variabile locale vs variabile globale
| Base di confronto | Variabile globale | Variabile locale |
|---|---|---|
| Definizione | Dichiarato fuori dalle funzioni | Dichiarato all'interno di un file Functions |
| Tutta la vita | Creato all'avvio del programma e distrutto al termine | Creato quando la funzione viene chiamata e distrutto quando ritorna |
| Condivisione dei dati | Condiviso in tutte le funzioni | Non condiviso; esiste solo nell'ambito della sua funzione |
| Ambito | È possibile accedervi ovunque nel programma | Accessibile solo all'interno della funzione |
| Parametri necessari | Non è necessario il passaggio di parametri | Può essere creato tramite parametri o assegnazioni all'interno della funzione |
| Magazzinaggio | Gestito nello spazio dei nomi globale (posizione di memoria non fissa) | Memorizzato nello spazio dei nomi locale della funzione (stack frame) |
| Valore | Le modifiche riguardano l'intero programma | Le modifiche sono locali e non influiscono su altre funzioni |