Domeniul de vizibilitate
Locul în care creezi o variabilă decide unde o poți folosi: doar în interiorul acelei regiuni. Această idee se numește domeniu de vizibilitate.
Domeniul local
Când creezi o variabilă în interiorul unei funcții, ea se află în domeniul local al acelei funcții și nu poate fi folosită în altă parte.
Așadar, x din exemplele de mai jos nu poate fi accesat din afara funcției, dar orice funcție definită în interiorul acelei funcții îl poate folosi în continuare.
Exemplu
În interiorul funcției care a creat-o, variabila funcționează normal:
Ieșire: program Python complet
def myfunc():
x = 300
print(x)
myfunc()
Exemplu
O funcție interioară poate citi variabila locală a funcției care o conține:
Ieșire: program Python complet
def myfunc():
x = 300
def myinnerfunc():
print(x)
myinnerfunc()
myfunc()
Domeniul global
Creează o variabilă în corpul principal al codului tău Python și ea devine o variabilă globală, parte a domeniului global.
Poți ajunge la o variabilă globală din orice domeniu, atât global, cât și local.
Dacă folosești același nume atât în interiorul, cât și în afara unei funcții, obții două variabile separate. Cea din afara funcției se află în domeniul global, iar cea din interior se află în domeniul local.
Exemplu
Creată în afara oricărei funcții, această variabilă este globală, așa că tot codul o poate folosi:
Ieșire: program Python complet
x = 300
def myfunc():
print(x)
myfunc()
print(x)
Exemplu
Mai întâi funcția afișează x local, apoi codul principal îl afișează pe cel global:
Ieșire: program Python complet
x = 300
def myfunc():
x = 200
print(x)
myfunc()
print(x)
Cuvântul cheie global
Ești într-un domeniu local, dar ai nevoie să creezi o variabilă globală? Cuvântul cheie global face exact asta.
El transformă variabila într-una globală.
Ai nevoie de acest cuvânt cheie și atunci când o funcție trebuie să schimbe valoarea unei variabile globale existente.
Exemplu
Datorită lui global, x face parte din domeniul global:
global în interiorul unei funcții pentru a crea o variabilă globală x=300.
Afișează x în afara funcției.
Ieșire: program Python complet
def myfunc():
global x
x = 300
myfunc()
print(x)
Exemplu
Declararea variabilei cu global îi permite funcției să-i schimbe valoarea:
global în interiorul unei funcții pentru a o schimba în 200.
Afișează x după apelarea funcției.
Ieșire: program Python complet
x = 300
def myfunc():
global x
x = 200
myfunc()
print(x)
Cuvântul cheie nonlocal
Funcțiile imbricate folosesc cuvântul cheie nonlocal ca să lucreze cu variabilele funcției din jurul lor.
Cu el, variabila aparține funcției exterioare.
Exemplu
Din cauza lui nonlocal, x este aici variabila funcției exterioare:
nonlocal într-o funcție imbricată pentru a modifica variabila funcției exterioare.
Setează x="Jane" în outer, schimb-o în "hello" în inner și returnează x.
Ieșire: program Python complet
def myfunc1():
x = "Jane"
def myfunc2():
nonlocal x
x = "hello"
myfunc2()
return x
print(myfunc1())
Regula LEGB
Ca să caute numele unei variabile, Python aplică regula LEGB și încearcă aceste locuri în ordine:
- Local - Funcția care rulează chiar acum
- Enclosing (înconjurător) - Funcțiile din jurul ei, de la interior spre exterior
- Global - Nivelul superior al modulului
- Built-in (încorporat) - Spațiul de nume cu numele încorporate în Python
Exemplu
Regula LEGB în acțiune:
Ieșire: program Python complet
x = "global"
def outer():
x = "enclosing"
def inner():
x = "local"
print("Interior:", x)
inner()
print("Exterior:", x)
outer()
print("Global:", x)