Python - Globalne, lokalne i nelokalne varijable


Globalne varijable

U Pythonu je varijabla deklarisana izvan funkcije ili u globalnom opsegu poznata kao globalna varijabla. To znači da se globalnoj varijabli može pristupiti unutar ili izvan funkcije. Pogledajmo primjer kako se u Pythonu kreira globalna varijabla.


Primjer 1: Kreiranje globalne varijable

x = "global"

def foo():
    print("x inside:", x)

foo()
print("x outside:", x)

U prethodnom kodu kreirali smo x kao globalnu varijablu i definisali foo() za ispis globalne varijable x. Konačno, pozivamo foo() koji će ispisati vrijednost x. Šta ako želite promijeniti vrijednost x unutar funkcije?

x = "global"

def foo():
    x = x * 2
    print(x)

foo()

Izlaz prikazuje grešku, jer Python x tretira kao lokalnu varijablu, a x takođe nije definisan unutar foo(). Da bi ovo uspjelo, koristimo globalnu ključnu riječ. Pogledajte lekciju Python Globalne ključne riječi da biste saznali više.



Lokalne varijable

Varijabla deklarisana unutar tijela funkcije ili u lokalnom opsegu poznata je kao lokalna varijabla.


Primjer 2: Pristup lokalnoj varijabli izvan opsega

def foo():
    y = "local"

foo()
print(y)

Izlaz prikazuje grešku, jer pokušavamo pristupiti lokalnoj varijabli y u globalnom opsegu, dok lokalna varijabla radi samo unutar foo() ili lokalnog opsega. Pogledajmo primjer kako se lokalna varijabla kreira u Pythonu.


Primjer 3: Kreiranje lokalnu varijablu

Uobičajeno, deklarišemo varijablu unutar funkcije kako bismo kreirali lokalnu varijablu.

def foo():
    y = "local"
    print(y)

foo()


Globalne i lokalne varijable

Ovdje ćemo pokazati kako koristiti globalne i lokalne varijable u istom kodu.


Primjer 4: Korištenje globalnih i lokalnih varijabli u istom kodu

x = "global "

def foo():
    global x
    y = "local"
    x = x * 2
    print(x)
    print(y)

foo()

U primjeru ovoga kodu deklarišemo x kao globalnu varijablu, a y kao lokalnu varijablu u foo(). Zatim koristimo operator množenja * za modifikovanje globalne varijable x i ispisujemo i x i y. Nakon pozivanja foo(), vrijednost x postaje globalna, jer smo x * 2 koristili za ispis dva puta globalno. Nakon toga ispisujemo vrijednost lokalne varijable y, tj. local.


Primjer 5: Globalna i lokalna varijabla s istim imenom

x = 5

def foo():
    x = 10
    print("local x:", x)

foo()
print("global x:", x)

U primjeru ovoga koda koristili smo isto ime x i za globalnu i za lokalnu varijablu. Dobijamo drugačiji rezultat kada ispisujemo istu varijablu, jer je varijabla deklarisana u oba opsega, tj. lokalni opseg unutar foo() i globalni opseg izvan foo(). Kada ispisujemo varijablu unutar foo(), ona daje local x: 10. To se naziva lokalni opseg varijable. Slično tome, kada ispisujemo varijablu izvan foo(), ona daje global x: 5. To se naziva globalni opseg varijable.



Nelokalne varijable

Nelokalne varijable koriste se u ugniježdenim funkcijama čiji lokalni opseg nije definisan. To znači da varijabla ne može biti ni u lokalnom ni u globalnom opsegu. Pogledajmo primjer kako se nelokalna varijabla koristi u Pythonu. Nelokalne ključne riječi (nonlocal keywords) koristimo za stvaranje nelokalnih varijabli (nonlocal variables).


Primjer 6: Stvaranje nelokalne varijable

def outer():
    x = "local"

    def inner():
        nonlocal x
        x = "nonlocal"
        print("inner:", x)

    inner()
    print("outer:", x)

outer()

U gornjem primjeru vidimo ugniježdenu inner() funkciju. Nelokalne ključne riječi koristimo za stvaranje nelokalne varijable.Funkcija inner() definisana je u opsegu druge funkcije external().