Globalne promenljive

9.3 Globalne promenljive 

Da li bi ljudska vrsta bila toliko moćna da ne može da menja neke globalne stvari – da gradi, ruši, da menja prirodne zakone? Ne, ne bi smo bili uopšte različiti od obične biljke! Mi imamo, hoćemo i možemo da menjamo svet, postoje alati kojima svoje želje (gramzivost, pohlepu, sebičnost, sadizam) pretvaramo u stvarnost! Pa zašto nam onda Python da nas zakida za to pravo nad prirodom, za koje su se izborile generacije i generacije naših predaka u nemilosrdnom i krvavom ratu protiv prirodnih lepota, koji još uvek traje?
Lagano. Ne žuri, neće ti Python uskratiti delić tvoje „ljudske“ moći. Naravno da možeš da utičeš i na glavne tokove. Ako baš želiš da menjaš vrednost promenljive koja je definisana u glavnom delu programa  (stručnije rečeno: nije u delokrugu funkcija ili klasa), onda moraš da kažeš Python-u da to ime nije lokalno za funkciju, već da misliš na spoljni deo te funkcije – tj. ime je globalno. To „govoriš“ Pythonu koristeći komandu global. Znaj da je nemoguće menjati vrednosti promenljivim koje su definisana izvan funkcije bez global naredbe.
Drugim rečima, global naredba omogućava da funkcija komunicira sa svetom „kroz prozor“. Više ne moraš da joj na vrata daješ vrednosti! 
Ti možeš da koristiš vrednosti promenljivih definisanih izvan funkcije (pod pretpostavkom da nisi definisao neku promenljivu sa istim imenom unutar te funkcije, jer u tom slučaju ovo baš i ne važi). Međutim, to ne bi trebao raditi i to bi trebao da izbegavaš u širokom luku (uskoro će ti biti i jasno), jer je takav pristup prilično nejasan, kako nekim drugim čitaocima tvog programa, tako i samom tebi, jer izaziva konfuziju gde je ta promenljiva definisana i čemu služi, kada se tako lako menja? Ako koristiš naredbu global svima je dovoljno jasna činjenica da je ta promenljiva definisana u spoljašnjem bloku. 
Hajde da se vratimo na naš primer sa skijašem... Pošto mrzi zimu, a voli skijanje, opet se smrzao dok je išao do hotela... Sutradan je na svom brzom spustu, krajičkom oka ugledao jednu građevinu, za koju je pomislio da će mu dobro poslućiti svrsi... Opet je bilo jako hladno napolju, i naš junak je odlučio da malo ugreje ceo svet....
>>> # Napolju 
... 
>>> temperatura = 'Jako hladno' 
>>> def fukushima(): 
... # idemo kroz prozor, ovo je neka ruina od zgrade 
... # Zar je i unutra jako hladno? 
...     global temperatura 
... # Hej, vidi-vidi, ovde je neko dugme 
... # hajde da ga stisnemo 
...     temperatura = 'pakleno toplo' 
... # bum!
...     print(temperatura) 
... 
>>> # Idemo u fukoshimu 
... 
>>> fukushima() 
pakleno toplo 
>>> # jupi, ugrejani smo... Idemo nazad u hotel... 
... 
>>> print(temperatura) 
pakleno toplo 
>>> # Ups.... 
... 
>>> 
Upotrebom komande global, naš mali junak ne samo da se ugrejao, već je ugrejao ceo svet! Izazvao je GLOBALNO zagrevanje.... I sad srećnik izlazi na skijašku stazu.... Čekaj malo, nije ovo nikakva staza, pa ovo je obična livada... Bolje da skinem skije, smejaće mi se ljudi.... Hehehe, vidi ove, imaju skije na nogama u planini u Januaru, hehehe... Samo, što me tako čudno gledaju, i, što mi još više nije jasno – zašto onako zelenkasto svetle u mraku? Verovatno da bi videli kuda skijaju - po travi!
Ukratko govoreći – programirajući imaš svu slobodu ovog sveta da radiš šta te je volja. Tako isto, imaš i slobodu da koristiš i lokalne i globalne promenljive na način koji tebi odgovara, ali pazi na rezultate svoga rada. Šta ako ne želiš novu vrednost koju si dobio menjajući staru, na mestu kao što je funkcija? Zapamti ovo – ako nešto možeš da uradiš, to ne znači da to i treba da uradiš!
Na primer, da se vratimo u realnost, tebi niko ne brani da uradiš ovo:
>>> def print(p): 
...     input(len(p)) 
... 
>>> print('abrakadabra') 
11 
>>> 
Upravo si definisao print funkciju, koja ne radi ni približno ono na šta si navikao. Desilo se da si definisao ime koje je već definisano u samom Pythnu! Sada uživaj u novoj print funkciji koja ne radi ništa korisno!
Kmeee.... Zeznuo si mi računar!
Ma samo restartuj Python prmpt... Ne brini se... I tvoji programi imaju svoj delokrug delovanja, kao što i Pythonov prompt ima svoj delokrug dejstva promenljivih definisanih unutar njega. Imaj malo poverenja, ja ti na ovom mestu sigurno neću pokazati išta što bi moglo da naudi normalnom funkcionisanju bilo čega na tvom računaru. Ovaj primer pokazuje kako se sa malom nepažnjom može dosta toga pokvariti.

9.2 Lokalne promenljive Indeks 9.4 Definisanje podrazumevanih
argumenata funkcije

Primjedbe

Popularno

Kako televizija štetno utiče na Vaše zdravlje finansije?

Da li je TV kviz Slagalica "prevara"?

Tu je novi Qt creator 4.4.0!

Kada prijatelji odlaze

Microsoft objavio - nova verzija Windowsa stiže...

Opet su se pojavili lažni kuponi brenda "IDEA" na društvenim mrežama

Najgore obrade velikih rock hitova

Sitnije promene na blogu...

Poslednji pozdrav izgubljenom vremenu

Ne, Marlboro ne deli besplatne cigarete!