Variabili globali e locali in Python

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.

Esempio 1: In questo codice stiamo creando e accedendo a una variabile locale all'interno di una funzione.

Python
   def   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.

Python
   msg   =   '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.

Python
   def   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)

Python
   def   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)

Python
   s   =   '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

Python
   a   =   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