Introducere în variabilele globale și locale în Python

Publicat: 2021-08-26

Python gestionează variabilele într-un mod foarte neconformist. În timp ce multe limbaje de programare consideră variabilele ca fiind globale în mod implicit (dacă nu sunt declarate ca locale), Python consideră variabilele ca fiind locale, dacă nu sunt declarate invers. Motivul principal din spatele Python care consideră variabilele ca fiind locale în mod implicit este că folosirea variabilelor globale este, în general, considerată o practică de codare proastă.

Deci, în timpul programării în Python, atunci când definirea variabilelor are loc într-o funcție, acestea sunt locale în mod implicit. Orice modificări sau manipulări pe care le faceți acestei variabile în corpul funcției vor rămâne numai în domeniul de aplicare al acestei funcții. Sau, cu alte cuvinte, acele modificări nu vor fi reflectate în nicio altă variabilă din afara funcției, chiar dacă variabila are același nume cu variabila funcției. Toate variabilele există în domeniul de aplicare al funcției în care sunt definite și dețin acea valoare. Pentru a obține experiență practică cu variabilele și proiectele Python, încercați certificările noastre de știință a datelor de la cele mai bune universități din SUA.

Prin acest articol, să explorăm noțiunea de variabile locale și globale în Python, împreună cu modul în care definiți variabilele globale. Ne vom uita, de asemenea, la ceva cunoscut sub numele de „variabile nonlocale”.

Citește mai departe!

Cuprins

Variabile globale și locale în Python

Să ne uităm la un exemplu pentru a înțelege cum pot fi utilizate valorile globale în corpul unei funcții în Python:

Program:

def func():

print(șir)

șir = „Îmi place Python!”

func()

Ieșire

Iubesc Python!

După cum puteți vedea, șirului variabil i se dă valoarea „Iubesc Python!” înainte ca func() să fie apelată. Corpul funcției este format doar din instrucțiunea print. Deoarece nu există nicio atribuire variabilei șir în corpul funcției, aceasta va lua în schimb valoarea variabilei globale.

Ca rezultat, rezultatul va fi oricare ar fi valoarea globală a șirului variabil, care, în acest caz, este „Iubesc Python!”.

Acum, să schimbăm valoarea șirului în interiorul func() și să vedem cum afectează variabilele globale:

Program:

def func():

șir = „Îmi place Java!”

print(șir)

șir = „Îmi place Python!”

func()

print(șir)

Ieșire:

Iubesc Java!

Iubesc Python!

În programul de mai sus, am definit o funcție func(), iar în cadrul acesteia, avem un șir variabil cu valoarea „I love Java!”. Deci, această variabilă este locală pentru funcția func(). Apoi, avem variabila globală ca mai devreme și apoi apelăm funcția și instrucțiunea print. În primul rând, funcția este declanșată, apelând instrucțiunea de imprimare a acelei funcție și oferind rezultatul „Iubesc Java!” – care este variabila locală pentru acea funcție. Apoi, odată ce programul iese din domeniul de aplicare al funcției, valoarea lui s este schimbată în „Iubesc Python”, și de aceea obținem ambele linii ca rezultat.

Acum, să adăugăm primele două exemple și să încercăm să accesăm șirul folosind instrucțiunea print, apoi să încercăm să-i atribuim o nouă valoare. În esență, încercăm să creăm un șir ca variabilă atât locală, cât și globală.

Din fericire, Python nu permite această confuzie și aruncă o eroare. Iată cum:

Program:

def func():

print(șir)

șir = „Îmi place Java!”

print(șir)

șir = „Îmi place Python!”

func()

Ieșire (eroare):

——————————————————————————

UnboundLocalError Traceback (cel mai recent apel ultimul)

<ipython-input-3-d7a23bc83c27> în <modul>

5

6 șiruri = „Îmi place Python!”

—-> 7 func()

<ipython-input-3-d7a23bc83c27> în func()

1 def func():

—-> 2 print(șir)

3 șiruri = „Îmi place Java!”

4 print(șir)

5

UnboundLocalError: variabilele locale la care se face referire înainte de atribuire

Evident, Python nu permite unei variabile să fie atât globală, cât și locală în interiorul unei funcții. Deci, ne oferă o variabilă locală, deoarece atribuim o valoare șirului din func(). Ca rezultat, prima instrucțiune de tipărire arată notificarea de eroare. Toate variabilele create sau modificate în domeniul oricărei funcții sunt locale, cu excepția cazului în care au fost declarate ca „globale” în mod explicit.

Definirea variabilelor globale în Python

Cuvântul cheie global este necesar pentru a informa Python că accesăm variabile globale. Iată cum:

Program:

def func():

șir global

print(șir)

șir = „Dar vreau să învăț și Python!”

print(șir)

string = „Caut să învăț Java!”

func()

print(șir)

Ieșire:

Caut sa invat Java!

Dar vreau să învăț și Python!

Dar vreau să învăț și Python!

După cum puteți vedea din rezultat, Python recunoaște variabilele globale aici și evaluează instrucțiunea de tipărire în consecință, oferind rezultate adecvate.

Utilizarea variabilelor globale în funcții imbricate

Acum, să examinăm ce se va întâmpla dacă variabilele globale sunt folosite în funcțiile imbricate. Consultați acest exemplu în care variabila „limbă” este definită și utilizată în diverse domenii:

Program:

def func():

limba = „engleză”

def func1():

limbaj global

limba = „spaniolă”

print(„Înainte de a apela func1: ” + limba)

print(„Se apelează func1 acum:”)

func1()

print(„După apelul func1: ” + limba)

func()

print(„Valoarea limbii în principal: ” + limba)

Ieșire:

Înainte de a apela func1: engleză

Apelarea func1 acum:

După apelul func1: engleză

Valoarea limbii în principal: spaniolă

După cum puteți vedea, cuvântul cheie global, atunci când este utilizat în funcția imbricată func1, nu are niciun impact asupra variabilei „limba” a funcției părinte. Adică, valoarea este păstrată ca „engleză”. Acest lucru arată, de asemenea, că după apelarea func(), există o variabilă „limba” în spațiul de nume al modulului cu o valoare „spaniolă”.

Această constatare este în concordanță cu ceea ce ne-am dat seama și în secțiunea anterioară - că o variabilă, atunci când este definită în corpul unei funcții, este întotdeauna locală, dacă nu este specificat altfel. Cu toate acestea, ar trebui să existe un mecanism pentru accesarea variabilelor care aparțin și altor domenii diferite.

Aici intervin variabilele non-locale!

Variabile nelocale

Variabilele nelocale sunt tipuri noi de variabile introduse de Python3. Acestea au multe în comun cu variabilele globale și sunt, de asemenea, extrem de importante. Cu toate acestea, o diferență între variabilele nelocale și globale este că variabilele nelocale nu fac posibilă modificarea variabilelor din domeniul modulului.

Consultați următoarele exemple pentru a înțelege acest lucru:

Program:

def func():

limbaj global

tipărire (limbă)

limba = „germană”

func()

Ieșire:

limba germana

După cum era de așteptat, programul returnează „Frankfurt” ca rezultat. Acum, să schimbăm „global” în „nonlocal” și să vedem ce se întâmplă:

Program:

def func():

limba non-locală

tipărire (limbă)

limba = „germană”

func()

Ieșire:

Fișier „<ipython-input-9-97bb311dfb80>”, rândul 2

limba non-locală

^

SyntaxError: nu a fost găsită nicio legătură pentru „limbaj” non-local

După cum puteți vedea, programul de mai sus aruncă o eroare de sintaxă. Putem înțelege de aici că atribuirile non-locale pot fi făcute numai din definiția funcțiilor imbricate. Variabilele non-locale ar trebui definite în domeniul de aplicare al funcției și, dacă nu este cazul, nu își poate găsi definiția nici în domeniul imbricat. Acum, verifică următorul program:

Program:

def func():

limba = „engleză”

def func1():

limba non-locală

limba = „germană”

print(„Înainte de a apela func1: ” + limba)

print(„Se apelează func1 acum:”)

func1()

print(„După apelul func1: ” + limba)

limba = „spaniolă”

func()

print(„„limba” în principal: ” + limbă)

Ieșire:

Înainte de a apela func1: engleză

Apelarea func1 acum:

După apelul func1: germană

„limbă” în principal: spaniolă

Programul de mai sus funcționează deoarece variabila „limba” a fost definită înainte de a apela func1(). Dacă nu este definit, vom primi o eroare ca mai jos:

Program:

def func():

#language = „engleză”

def func1():

limba non-locală

limba = „germană”

print(„Înainte de a apela func1: ” + limba)

print(„Se apelează func1 acum:”)

func1()

print(„După apelul func1: ” + limba)

limba = „spaniolă”

func()

print(„„limba” în principal: ” + limbă)

Ieșire:

Fișier „<ipython-input-11-5417be93b6a6>”, rândul 4

limba non-locală

^

SyntaxError: nu a fost găsită nicio legătură pentru „limbaj” non-local

Cu toate acestea, programul va funcționa bine dacă înlocuim nonlocal cu global:

Program:

def func():

#language = „engleză”

def func1():

limbaj global

limba = „germană”

print(„Înainte de a apela func1`: ” + limba)

print(„Se apelează func1 acum:”)

func1()

print(„După apelul func1: ” + limba)

limba = „spaniolă”

func()

print(„„limba” în principal: ” + limbă)

Ieșire:

Înainte de a apela func1: engleză

Apelarea func1 acum:

După apelul func1: germană

„limbă” în principal: germană

Dacă observați, valoarea variabilei globale (limbaj) se schimbă și în programul de mai sus! Aceasta este puterea pe care o aduc cu ele variabilele non-locale!

În concluzie

În acest articol, am discutat despre variabilele locale, globale și nonlocale în Python, împreună cu diferite cazuri de utilizare și posibile erori la care ar trebui să le urmăriți. Cu aceste cunoștințe alături, puteți merge mai departe și puteți începe să exersați cu diferite tipuri de variabile și să observați diferențele subtile.

Python este un limbaj de programare extrem de popular pe tot globul – mai ales când vine vorba de rezolvarea problemelor și provocărilor legate de date. La upGrad, avem o bază de cursanți în peste 85 de țări, cu peste 40.000 de cursanți plătiți la nivel global, iar programele noastre au afectat peste 500.000 de profesioniști care lucrează. Cursurile noastre de Data Science și Machine Learning au fost concepute pentru a ajuta studenții motivați din orice mediu să-și înceapă călătoria și să exceleze în domeniul științei datelor. Asistența noastră în carieră la 360 de grade asigură că, odată ce sunteți înscris la noi, cariera dumneavoastră va continua doar în sus. Luați legătura cu noi astăzi și experimentați puterea învățării de la egal la egal și a rețelei globale!

Care sunt tipurile de variabile în Python?

Pe baza domeniului lor, variabilele din Python sunt fie locale, globale, fie nelocale.

Pot fi accesate variabilele globale din Python din cadrul unei funcții?

Da, variabilele globale pot fi accesate dintr-o funcție în Python.

Care este diferența dintre variabilele locale și globale?

Variabilele globale au ca scop întregul program, în timp ce variabilele locale au doar funcția în care sunt definite ca scop.