Python - Globalne ključne riječi (Global Keyword)


Šta su globalne ključne (global keyword) riječi?

U Python-u, globalna ključna riječ (global keyword) vam omogućava promjenu varijable izvan trenutnog opsega. Koriste se za stvaranje globalne varijable i unošenje promjena u lokalnom kontekstu varijable.



Pravila globalne ključne riječi

Osnovna pravila za globalnu ključnu riječ (global keyword) u Python-u su:

  • Kada kreiramo varijablu unutar funkcije, ona je prema zadanim postavkama lokalna.
  • Kada definišemo varijablu izvan funkcije, ona je prema zadanim postavkama globalna. Ne morate koristiti globalnu ključnu riječ (global).
  • Koristimo globalnu ključnu riječ za čitanje i pisanje globalne varijable unutar funkcije.
  • Upotreba globalne ključne riječi izvan funkcije nema efekta.


Upotreba globalne ključne riječi


Primjer 1: Pristup globalnoj varijabli iz funkcije

c = 1 # globalna (global) varijabla

def add():
    print(c)

add()

Prikaz koda iz gornjeg primjera izgledaće ovako:


1


Međutim, možemo imati neke scenarije u kojima trebamo modifikovati globalnu varijablu unutar funkcije.


Primjer 2: Modifikovanje globalne varijable unutar funkciji

c = 1 # globalna (global) varijabla
    
def add():
    c = c + 2 # increment c za 2
    print(c)

add()

Kada pokrenemo program, izlaz prikazuje grešku:


UnboundLocalError: local variable 'c' referenced before assignment


To je zato što možemo pristupiti samo globalnoj varijabli, ali je ne možemo mijenjati unutar funkcije. Rješenje za to je korištenje ključne riječi global.


Primjer 3: Promjena globalne varijable unutar funkciji pomoću global

c = 0 # globalna (global) varijabla

def add():
    global c
    c = c + 2 # increment za 2
    print("Unutar add():", c)

add()
print("Uglavnom:", c)

U gornjem programu definišemo c kao globalnu ključnu riječ unutar funkcije add(). Zatim, povećavamo varijablu c za 1, tj. c = c + 2. Nakon toga pozivamo funkciju add(). Na kraju, ispisujemo globalnu varijablu c. Kao što vidimo, promjena se dogodila i na globalnoj varijabli izvan funkcije, c = 2.



Globalne varijable u Python modulima

U Python-u kreiramo jedan modul config.py za zadržavanje globalnih varijabli i razmjenu informacija između Python modula unutar istog programa. Evo kako možemo dijeliti globalne varijable kroz Python module.


Primjer 4: Podijela globalne varijable između Python modula

Kreirajte datoteku config.py za pohranu globalnih varijabli.

a = 0
b = "empty"

Kreirajte datoteku update.py za promjenu globalnih varijabli.

import config

config.a = 10
config.b = "alphabet"

Kreirajte datoteku main.py da biste testirali promjene u vrijednosti.

import config
import update

print(config.a)
print(config.b)

U prethodnom primjeru stvorili smo tri datoteke: config.py, update.py i main.py. Modul config.py pohranjuje globalne varijable a i b. U datoteku update.py uvozimo modul config.py i mijenjamo vrijednosti a i b. Slično tome, u datoteku main.py uvozimo i config.py i update.py modul. Na kraju, ispisujemo i testiramo vrijednosti globalnih varijabli bez obzira jesu li promijenjene ili ne.



Globalne u ugnježdene funkcije

Evo kako možete koristiti globalnu varijablu u ugnježdenoj funkciji.


Primjer 5: Korištenje globalne varijable u ugnježdenoj funkciji

def foo():
    x = 20

    def bar():
        global x
        x = 25
    
    print("Prije pozivanja bar: ", x)
    print("Pozovi bar sada")
    bar()
    print("Nakon poziva bar: ", x)

foo()
print("x je uglavnom: ", x)

U gore navedenom programu proglasili smo globalnu varijablu unutar ugnježdene funkcijske bar(). Unutar funkcije foo(), x nema efekat globalne ključne riječi. Prije i nakon poziva funkcije bar(), varijabla x poprima vrijednost lokalne varijable, tj. x = 20. Izvan funkcije foo(), varijabla x poprimiće vrijednost definisanu u funkciji bar(), tj. x = 25. Ovo se dešava, jer smo koristili globalnu ključnu riječ u x za stvaranje globalne varijable unutar funkcije bar() (lokalni opseg (local scope)). Ako napravimo bilo kakve promjene unutar funkcije bar(), promjene se pojavljuju izvan lokalnog opsega, tj. funkcije foo().