Lokalne promenljive

9.2 Lokalne promenljive 

Do sada bi trebalo da si shvatio svrhu pisanja funkcija – to su mini-programi koje koristimo u svojim programima da nešto ne bi morali da pišemo hiljadu puta. I pošto su one, na neki način, izdvojene od ostatka, programa, mi komuniciramo sa njima tako što ih pozivamo prosleđujući neke argumenate u zagradama. U trenutku pisanja samog programa, nas više apsolutno ne zanima šta se u toj funkciji dešava, već samo želimo nešto od nje.
Shodno tome, radi konačnog razjašnjavanja cele zbrke, dajem ti jedan realan primer. Zamisli funkciju da je neka kuća, u kojoj žive neki ljudi, koji nešto rade. Kada pozivamo funkciju, mi u suštini kucamo na vrata kuće. Mi želimo da nam ljudi iz te kuće nešto urade, zato im i dajemo nešto (argumente) i oni nam to urade. Ali kakav je odnos tih ljudi u kući prema spoljašnjem svetu?
>>> spoljasnjost = 'toplo' 
>>> def kuca(): 
...     print(spoljasnjost) 
... 
>>> kuca() 
toplo 
>>> 
Aha, ljudi u toj kući vide kakvo je vreme napolju, ali...
>>> prolaznik = 'zove taksi' 
>>> def kuca(): 
...     prolaznik += ' telefonom' 
...     print(prolaznik) 
... 
>>> kuca() 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
  File "<stdin>", line 2, in kuca 
UnboundLocalError: local variable 'prolaznik' referenced before assignment 
>>> 
Šta bi? Ovo je značajno – ljudi u kući (funkcija) mogu da vide spoljašnji svet, ali ne mogu da ga menjaju, ne mogu da ga pozovu unutra da čovek upotrebi telefon! Zapravo, to je i suština – mogu da gledaju kroz prozor, ali ne mogu da pipnu nešto iz tog „spoljašnjeg“ sveta, a na njihovu sreću, spoljašnji svet ne može, takođe, nit da vidi, nit da pipne ono što je u kući. Jedini način komunikacije „kuće“ sa spoljnim svetom je kroz vrata (pozivanje funkcije). Iako nije sasvim tačno, ovoga treba da se na ovom mestu držiš kao pijan plota.
Takođe, kada definišemo neku promenljivu unutar bloka funkcije, ta promenljiva nije povezana ni na jedan način sa nekom drugom promenljivom koja ima isto takvo ime, i koju koristimo izvan te funkcije. Imena promenljivih u funkciji su lokalnog karaktera - tj. koriste se, i postoje samo u toj funkciji. Ovo se, inače, naziva scope - delovanje imena promenljive. Sve promenljive su efikasne samo unutar bloka u kom smo ih definisali.
Budući da je sve ovo možda konfuzno, nastavimo paralelu sa našom kućom kao funkcijom. Zamisli da si na nekoj planini na zimovanju, skijaš se. Napolju je temperatura na kojoj mali Tuxovi (Tux – Pingvin, simbol Linuxa) padaju u nesvest. Posle nekog vremena vidiš neku kolibu, doskijaš do nje u želji da se ugreješ, pokucaš na vrata... Naravno, posle toga znaš da moraš odskijati do hotela... Da vidimo šta se dešava....
>>> temperatura = 'Tux se smrznuo!' 
>>> def koliba(temperatura): 
... # Uneli smo malo zime sa sobom 
...     print(temperatura) 
... # A da zapalimo malu vatru? 
...     temperatura = 'toplo' 
...     print(temperatura) 
... 
>>> print(temperatura) 
Tux se smrznuo! 
>>> # idemo u kolibu 
... 
>>> koliba(temperatura) 
Tux se smrznuo! 
toplo 
>>> # A da li nam je toplo i kada krenemo nazad u hotel? 
... 
>>> print(temperatura) 
Tux se smrznuo! 
>>> 
Na žalost, temperaturu smo mogli da promenimo samo u kolibi, čim smo krenuli nazad prema hotelu, opet je isto, hladno (drugim rečima, lokalna promenljiva nije uticala na globalnu, koja je ostala ista kao i pre pozivanja funkcije). Zaista čudno da, paleći vatru u kolibi, nismo uspeli da utičemo na klimu napolju. Uh... Mrzim zimu... brrrr.... Kako to da običnom vatricom nisam uspeo da vratim leto i izazovem globalno zagrevanje? Čekaj, stani malo... GLOBALNO zagrevanje?! Hmmm.... Mislim da se javlja neki mali Zloćko u meni.....

9.1 Parametri i
argumenti funkcija
Indeks 9.3 Globalne
promenljive

Primjedbe

Popularno ovog meseca

Gde pronaći novosti sa facebook stranica nakon velike promene koja ga je zadesila?

Dva načina da vratite svoj Windows 10 na fabričke vrednosti

Kako preuzeti video koji je neko postavio na facebook-u bez upotrebe dodatnih programa?

Više neće biti moguć besplatan prelazak na Windows 10

Prijateljski meč ŠK "Titel" - ŠK "Bukovac"

Tu je novi Qt creator 4.4.0!

Kako manipulisati Windows licencom pomoću slmgr komande?

Fake poet

Da li je poželjno biti anoniman na internetu (ili se predstavljati punim imenom i prezimenom)?

Organizacija foldera i fajlova u Linux fajl sistemu