Introduzione alle variabili globali e locali in Python

Pubblicato: 2021-08-26

Python 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!

Quali sono i tipi di variabili in Python?

In base al loro ambito, le variabili in Python sono locali, globali o non locali.

È possibile accedere alle variabili globali in Python dall'interno di una funzione?

Sì, è possibile accedere alle variabili globali dall'interno di una funzione in Python.

Qual è la differenza tra variabili locali e globali?

Le variabili globali hanno l'intero programma come ambito, mentre le variabili locali hanno solo la funzione in cui sono definite come ambito.