Introduzione alle variabili globali e locali in Python
Pubblicato: 2021-08-26Python gestisce le variabili in modo molto anticonformista. Mentre molti linguaggi di programmazione considerano le variabili come globali per impostazione predefinita (a meno che non siano dichiarate come locali), Python considera le variabili come locali a meno che non siano dichiarate il contrario. La ragione alla base di Python che considera le variabili come locali per impostazione predefinita è che l'utilizzo di variabili globali è generalmente considerato una scarsa pratica di codifica.
Quindi, durante la programmazione in Python, quando si verifica la definizione di variabile all'interno di una funzione, sono locali per impostazione predefinita. Eventuali modifiche o manipolazioni apportate a questa variabile all'interno del corpo della funzione rimarranno solo nell'ambito di questa funzione. O, in altre parole, tali modifiche non si rifletteranno in nessun'altra variabile al di fuori della funzione, anche se la variabile ha lo stesso nome della variabile della funzione. Tutte le variabili esistono nell'ambito della funzione in cui sono definite e mantengono quel valore. Per avere un'esperienza pratica su variabili e progetti Python, prova le nostre certificazioni di scienza dei dati delle migliori università degli Stati Uniti.
Attraverso questo articolo, esploriamo la nozione di variabili locali e globali in Python, insieme a come definire le variabili globali. Esamineremo anche qualcosa noto come "variabili non locali".
Continuare a leggere!
Sommario
Variabili globali e locali in Python
Diamo un'occhiata a un esempio per capire come i valori globali possono essere utilizzati all'interno del corpo di una funzione in Python:
Programma:
def funzione():
stampa (stringa)
string = "Adoro Python!"
funzione()
Produzione
Adoro Python!
Come puoi vedere, alla stringa variabile viene assegnato il valore "I love Python!" prima che func() venga chiamata. Il corpo della funzione è costituito solo dall'istruzione print. Poiché non vi è alcuna assegnazione alla variabile stringa all'interno del corpo della funzione, prenderà invece il valore della variabile globale.
Di conseguenza, l'output sarà qualunque sia il valore globale della stringa variabile, che in questo caso è "I love Python!".
Ora, cambiamo il valore di string all'interno di func() e vediamo come influisce sulle variabili globali:
Programma:
def funzione():
string = "Adoro Java!"
stampa (stringa)
string = "Adoro Python!"
funzione()
stampa (stringa)
Produzione:
Adoro Giava!
Adoro Python!
Nel programma sopra, abbiamo definito una funzione func(), e al suo interno abbiamo una stringa variabile con il valore “I love Java!”. Quindi, questa variabile è locale alla funzione func(). Quindi, abbiamo la variabile globale come prima, quindi chiamiamo la funzione e l'istruzione print. Innanzitutto, la funzione viene attivata, chiamando l'istruzione print di quella funzione e fornendo l'output "I love Java!" – che è la variabile locale per quella funzione. Quindi, una volta che il programma è fuori dall'ambito della funzione, il valore di s viene modificato in "I love Python", ed è per questo che otteniamo entrambe le righe come output.
Ora aggiungiamo i primi due esempi e proviamo ad accedere alla stringa usando l'istruzione print, quindi proviamo ad assegnarle un nuovo valore. In sostanza, stiamo cercando di creare una stringa come variabile locale e globale.
Fortunatamente, Python non consente questa confusione e genera un errore. Ecco come:
Programma:
def funzione():
stampa (stringa)
string = "Adoro Java!"
stampa (stringa)
string = "Adoro Python!"
funzione()
Uscita (errore):
——————————————————————————
UnboundLocalError Traceback (ultima chiamata)
<ipython-input-3-d7a23bc83c27> in <modulo>
5
6 string = "Adoro Python!"
—-> 7 fun()
<ipython-input-3-d7a23bc83c27> in func()
1 def func():
—-> 2 print(stringa)
3 string = "Adoro Java!"
4 stampa (stringa)
5
UnboundLocalError: variabile locale 's' referenziata prima dell'assegnazione
Evidentemente, Python non consente a una variabile di essere sia globale che locale all'interno di una funzione. Quindi, ci fornisce una variabile locale poiché assegniamo un valore alla stringa all'interno di func(). Di conseguenza, la prima istruzione print mostra la notifica di errore. Tutte le variabili create o modificate nell'ambito di qualsiasi funzione sono locali a meno che non siano state dichiarate esplicitamente "globali".
Definizione di variabili globali in Python
La parola chiave globale è necessaria per informare Python che stiamo accedendo a variabili globali. Ecco come:
Programma:
def funzione():
stringa globale
stampa (stringa)
string = "Ma voglio imparare anche Python!"
stampa (stringa)
string = "Sto cercando di imparare Java!"
funzione()
stampa (stringa)
Produzione:
Sto cercando di imparare Java!
Ma voglio imparare anche Python!
Ma voglio imparare anche Python!
Come puoi vedere dall'output, Python riconosce qui le variabili globali e valuta l'istruzione print di conseguenza, fornendo un output appropriato.
Utilizzo di variabili globali in funzioni nidificate
Ora, esaminiamo cosa accadrà se le variabili globali vengono utilizzate in funzioni nidificate. Dai un'occhiata a questo esempio in cui la variabile "lingua" viene definita e utilizzata in vari ambiti:
Programma:
def funzione():
lingua = “inglese”
def func1():
linguaggio globale
lingua = “spagnolo”
print(“Prima di chiamare func1: ” + lingua)
print("Chiamando func1 ora:")
funzione1()
print(“Dopo aver chiamato func1: ” + lingua)
funzione()
print(“Valore della lingua in principale: ” + lingua)
Produzione:
Prima di chiamare func1: inglese
Chiamando func1 ora:
Dopo aver chiamato func1: inglese
Valore della lingua principale: spagnolo
Come puoi vedere, la parola chiave globale, se utilizzata all'interno della funzione nidificata, non ha alcun impatto sulla variabile 'lingua' della funzione padre. Cioè, il valore viene mantenuto come "inglese". Questo mostra anche che dopo aver chiamato func(), esiste una variabile 'language' nello spazio dei nomi del modulo con un valore 'Spanish'.
Questa scoperta è coerente con quanto abbiamo scoperto anche nella sezione precedente: che una variabile, quando definita all'interno del corpo di una funzione, è sempre locale se non diversamente specificato. Tuttavia, dovrebbe esserci anche un meccanismo per accedere alle variabili appartenenti a diversi altri ambiti.
È qui che entrano in gioco le variabili non locali!
Variabili non locali
Le variabili non locali sono nuovi tipi di variabili introdotte da Python3. Questi hanno molto in comune con le variabili globali e sono anche estremamente importanti. Tuttavia, una differenza tra le variabili non locali e globali è che le variabili non locali non consentono di modificare le variabili dall'ambito del modulo.
Dai un'occhiata ai seguenti esempi per capirlo:
Programma:
def funzione():
linguaggio globale
stampa (lingua)
lingua = “tedesco”
funzione()
Produzione:
Tedesco
Come previsto, il programma restituisce 'Francoforte' come output. Ora, cambiamo "globale" in "non locale" e vediamo cosa succede:
Programma:
def funzione():
lingua non locale
stampa (lingua)
lingua = “tedesco”
funzione()
Produzione:
File “<ipython-input-9-97bb311dfb80>”, riga 2
lingua non locale
^
SyntaxError: nessun collegamento per 'lingua' non locale trovato
Come puoi vedere, il programma sopra genera un errore di sintassi. Possiamo comprendere da qui che le assegnazioni non locali possono essere eseguite solo dalla definizione di funzioni nidificate. Le variabili non locali devono essere definite nell'ambito della funzione e, in caso contrario, non può trovare la sua definizione nemmeno nell'ambito nidificato. Ora, controlla il seguente programma:
Programma:
def funzione():
lingua = “inglese”
def func1():
lingua non locale
lingua = “tedesco”
print(“Prima di chiamare func1: ” + lingua)
print("Chiamando func1 ora:")
funzione1()
print(“Dopo aver chiamato func1: ” + lingua)
lingua = “spagnolo”
funzione()
print(“'lingua' in main: ” + lingua)
Produzione:
Prima di chiamare func1: inglese
Chiamando func1 ora:
Dopo aver chiamato func1: tedesco
'lingua' in principale: spagnolo
Il programma sopra funziona perché la variabile 'language' è stata definita prima di chiamare func1(). Se non è definito, riceveremo un errore come di seguito:
Programma:
def funzione():
#lingua = “Inglese”
def func1():
lingua non locale
lingua = “tedesco”
print(“Prima di chiamare func1: ” + lingua)
print("Chiamando func1 ora:")
funzione1()
print(“Dopo aver chiamato func1: ” + lingua)
lingua = “spagnolo”
funzione()
print(“'lingua' in main: ” + lingua)
Produzione:
File “<ipython-input-11-5417be93b6a6>”, riga 4
lingua non locale
^
SyntaxError: nessun collegamento per 'lingua' non locale trovato
Tuttavia, il programma funzionerà perfettamente se sostituiamo nonlocal con global:
Programma:
def funzione():
#lingua = “Inglese”
def func1():
linguaggio globale
lingua = “tedesco”
print(“Prima di chiamare func1`: ” + lingua)
print("Chiamando func1 ora:")
funzione1()
print(“Dopo aver chiamato func1: ” + lingua)
lingua = “spagnolo”
funzione()
print(“'lingua' in main: ” + lingua)
Produzione:
Prima di chiamare func1: inglese
Chiamando func1 ora:
Dopo aver chiamato func1: tedesco
'lingua' in principale: tedesco
Se noti, anche il valore della variabile globale (lingua) viene modificato nel programma sopra! Questo è il potere che le variabili non locali portano con sé!
In conclusione
In questo articolo, abbiamo discusso le variabili locali, globali e non locali in Python, insieme a diversi casi d'uso e possibili errori a cui dovresti prestare attenzione. Con questa conoscenza al tuo fianco, puoi andare avanti e iniziare a esercitarti con diversi tipi di variabili e notare le sottili differenze.
Python è un linguaggio di programmazione estremamente popolare in tutto il mondo, soprattutto quando si tratta di risolvere problemi e sfide relativi ai dati. In upGrad, abbiamo una base di studenti in oltre 85 paesi, con oltre 40.000 studenti pagati in tutto il mondo e i nostri programmi hanno avuto un impatto su oltre 500.000 professionisti che lavorano. I nostri corsi in Data Science e Machine Learning sono stati progettati per aiutare gli studenti motivati di qualsiasi background a iniziare il loro viaggio ed eccellere nel campo della scienza dei dati. La nostra assistenza professionale a 360 gradi assicura che una volta che ti sei iscritto con noi, la tua carriera si sposterà solo verso l'alto. Contattaci oggi e sperimenta il potere dell'apprendimento tra pari e del networking globale!
In base al loro ambito, le variabili in Python sono locali, globali o non locali. Sì, è possibile accedere alle variabili globali dall'interno di una funzione in Python. Le variabili globali hanno l'intero programma come ambito, mentre le variabili locali hanno solo la funzione in cui sono definite come ambito.Quali sono i tipi di variabili in Python?
È possibile accedere alle variabili globali in Python dall'interno di una funzione?
Qual è la differenza tra variabili locali e globali?