Varijable su, ajmo tako reći, dijelovi radne memorije računala gdje mi
pohranjujemo neku informaciju. Varijable su spremnici za neku
vrijednost, dakle za neki broj, znak, tekst ili funkciju. Program ih
koristi kako bi se u njih zabilježili neki bitni podaci koje program
koristi i pristupa im za vrijeme izvršavanja.
Tipovi varijabli i definiranje varijable
Za razliku od nekih programskih jezika kao što je C, C++ ili Java,
definiranje varijabli u Python programskom jeziku je vrlo jednostavno.
Recimo, u C++-u ako želimo definirati varijablu u kojoj će biti
pohranjen broj 12 moramo napisati ovako:
int broj;
broj = 12
ili
int broj = 12
Dakle, potrebno je odrediti tip varijable prije korištenja iste, što se
još naziva deklaracija. U Pythonu, međutim, dovoljno je napisati:
broj = 12
i Python će tada automatski odrediti tip varijable ovisno o njezinu
sadržaju, te tako deklaracija nije ni potrebna. Slijede neki primjeri
varijabli:
broj = 12 - varijabla broj koja sadrži broj 12
tekst = "dobar dan" - varijabla tekst koja sadrži string (niz znakova)
dobar dan.
znak = "a" - varijabla koja sadrži string sa malim slovom a.
punoTeksta = """Prvi red
Zadnji red""" - varijabla koja sadrži string koji se sastoji od dva reda.
prazno = None - Varijabla koja ne sadrži ništa, budući da riječ None u
Pythonu označava ništicu. Ovo je korisno kada hoćemo definirati globalnu
varijablu bez početne vrijednosti, i želimo da ona ima neku vrijednost
tek kasnije za vrijeme izvršavanja programa.
nista = "" - Varijabla koja sadrži prazne navodnike. Definiranje ovakvih
varijabli je korisno ako želimo definirati globalnu varijablu koja će u
sebi kasnije sadržavati neki tekst ili znak, ali ne želimo da ona ima
neku početnu vrijednost.
broj_godina = 0 - varijabla broj_godina koja sadrži broj 0. Ovo je
korisno također ako definiramo globalnu varijablu koja će kasnije
sadržavati neki broj, ali joj ne želimo dati nikakvu početnu vrijednost.
Nadalje, varijablama možemo dodjeliti i sve ostale Python objekte, kao
što su funkcije, klase, te razni tipovi podataka kao što su liste ili
rječnici. Varijablama također možemo dodijeliti neku računsku operaciju,
tj. zbrajati, oduzimati, ili uspoređivati dvije ili više brojčanih
vrijednosti ili varijable koje sadrže neku brojčanu vrijednost pomoću
operatora o kojima će riječi biti malo kasnije, a tada će varijabla
vraćati rezultat te računske operacije npr. zbroji = 2+3 vraćati će broj
5. Također možemo kombinirati dva stringa u jedan odnosno dvije
varijable koje sadrže string u jedan string koristeći operator zbrajanja
(+) npr. puno_ime = "Hrvoje" + "Katic", vraćati će string "Hrvoje Katic".
Evo sad jedan primjer korištenja varijabli. Napišimo ga u datoteci
primjer3.py.
godina = 2010
print "Trenutna godina je:", godina
vrijeme = "sparno"
print "Vrijeme vani je trenutno:", vrijeme
raw_input()
Pokrenimo ovaj program i pisat će nam ovako:
Trenutna godina je 2010
Vrijeme vani je sparno
Dakle kao i kod mnogih drugih programskih jezika, u Pythonu se prvo
navodi naziv varijable, nakon toga znak jednakosti (=) koji ovdje
objašnjavamo kao operator za dodjelu, a iza toga vrijednost koju ćemo
povezati sa dotičnom varijablom. To je dakle sva mudrost. Još jednom
ponavljam, u Pythonu nema deklaracije, nego tip varijable ovisi o tome
što ta varijabla sadrži. Dakle ako sadrži broj 0 onda će to biti
brojčana varijabla ili tzv. int varijabla, ako sadrži "a" onda će to
biti varijabla za znak ili kompletni string itd.
Pogledajmo i pojasnimo dakle linije koda koje su nam ovdje manje poznate.
Linija1: godina = 2010 - varijabla koja se zove godina i sadrži broj 2010
Linija2: print "Trenutna godina je:", godina - Ispisuje rečenicu
"Trenutna godina je" i zatim tom nizu znakova dodaje vrijednost
varijable godina, što je u ovom slućaju 2010. Napomena, znak zareza (,)
se upotrebljava u funkciji print kada želimo ispisati više od jedne
stvari na ekranu, a u ovom primjeru je to string "Trenutna godina je" i
sadržaj varijable godina.
Linija3: vrijeme = "sparno" - ovdje smo definirali varijablu vrijeme
kojoj smo dodijelili vrijednost "sparno"
linija4: print "Vrijeme vani je trenutno " + vrijeme - ovdje dakle opet
ispisujemo naš tekst zajedno sa sadržajem varijable vrijeme
linija5: raw_input() - ne izlazi dok ne pritisnem Enter
Uporaba varijabli
Definiranu varijablu koristimo tako da upotrijebimo njezino ime na
mjestu gdje nam ona zatreba, odnosno da se bolje izrazim, upotrebljavamo
je tamo gdje nam je potreban njezin sadržaj. Primjer:
ime = "Hrvatska"
print ime
Dakle u prvoj liniji smo definirali varijablu naziva ime i dodijelili
joj vrijednost Hrvatska, a u drugoj liniji smo istu upotrijebili, drugim
riječima, rekli smo programu da ispiše sadržaj varijable ime na ekranu,
tako da kad pokrenete ovaj primjer, na ekranu će vam pisati Hrvatska.
Vrste Python varijabli
Dvije su vrste varijabli u Python jeziku, globalne i lokalne.
Globalne varijable
Globalne varijable se moraju definirati izvan funkcija, i to najbolje na
početku programskog koda. Globalne varijable se mogu rabiti unutar
cijelog programa, unutar svih funkcija. Međutim, ukoliko im želimo
promijeniti vrijednost, potrebno je da upotrijebimo ključnu riječ global
na mjestu gdje ćemo je mijenjati, osim izvan funkcija gdje je dovoljno
samo varijabli dodijeliti novu vrijednost.
Pogledajmo ovaj primjer, kojeg napišimo u datoteci primjer4.py.
godina = 2009
print "Godina je:", godina
def prikaz():
global godina
godina = 2010
print "Sada je godina:", godina
prikaz()
raw_input()
Ovdje smo dakle vidjeli neke stvari u kodu s kojima još nismo upoznati,
no doći ćemo i do toga nešto kasnije. Za sada je dovoljno da vidimo kako
funkcionira promjena sadržaja varijable. Dakle, na početku programa smo
definirali varijablu godina koja je imala sadržaj 2009, ispisali smo
njenu pohranjenu vrijednost na ekranu, a zatim smo definirali funkciju
pod nazivom prikaz u kojoj smo naveli da želimo varijabli ovdje dati
drugu vrijednost, te smo stoga napisali
global godina
a zatim smo napisali
godina = 2010
dakle promijenili smo vrijednost varijable iz 2009 u 2010. Na kraju smo
rekli programu da na ekranu ispiše string "Sada je godina" uz novu
vrijednost varijable godina. Na kraju smo pozvali funkciju prikaz tako
što smo napisali prikaz() O funkcijama nešto kasnije.
Kada se ovaj program pokrene, na ekranu će pisati.
Godina je: 2009
Sada je godina: 2010
Veoma je bitno da se upotrijebi ključna riječ global a zatim varijabla
kojoj želimo dodijeliti novu vrijednost. Ukoliko to ne napravimo, nova
vrijednost neće biti uvažena. Važno je razumjeti da su u Pythonu sve
vrijednosti varijabli konstantne (trajne), osim ako ih globaliziramo
pomoću ključne riječi global. Napomena: Ukoliko želimo mijenjati
vrijednosti od više varijabli, iza ključne riječi global moramo navesti
varijable odvojene zarezima npr. global godina, vrijeme, mjesto, a zatim
svakoj od njih posebno navesti nove vrijednosti.
Lokalne varijable
Lokalne (mjesne) varijable se mogu koristiti jedino unutar iste
funkcije, a ukoliko se iste upotrijebe izvan funkcije unutar koje su one
bile definirane ili unutar neke druge funkcije, doći će do greške. Evo
jedan primjer kako bi ovo mogao bolje pojasniti:
def prikaz():
godina = 2010
print godina
def test():
print godina
prikaz()
test()
raw_input()
Izvršavanjem ovog programa dolazi do sljedećeg ispisa:
Traceback (most recent call last):
File "D:\HrvojeKatic\Tools\Test\primjer.py", line 8, in <module>
test()
File "D:\HrvojeKatic\Tools\Test\primjer.py", line 6, in test
print godina
NameError: global name 'godina' is not defined
Dakle, što se tu dogodilo?
U programu ovdje imamo dvije funkcije, prikaz i test. Varijablu godina
definirali smo unutar tijela funkcije prikaz, umjesto izvan nje. Time je
ta varijabla postala dostupna samo za funkciju prikaz, ali ne i za
funkciju test i ostale funkcije i druge dijelove programa. Stoga, kada
smo je upotrijebili u funkciji test, dobili smo pogrešku da je varijabla
nepoznata. Ovo nam dakle govori da su varijable definirane u tijelu
funkcije lokalne i mogu se upotrebljavati samo u funkciji u kojoj su
definirane.
Brisanje varijable
U slućaju ako želimo izbrisati varijablu, upotrebljavamo ključnu riječ
del. Npr.
godina = 2010
del godina
Dakle, napisavši del godina, izbrisao sam varijablu godina, te stoga ona
od tog momenta postaje nepoznata Pythonu. Ja osobno do sada u svojim
programima nisam imao potrebe za brisanjem varijabli, no ukoliko vam
ikad zatreba da to napravite, možete to učiniti na ovakav način.
Osjetljivost na velika i mala slova
Vrlo važno je napomenuti da je Python, za razliku od nekih drugih
programskih jezika, osjetljiv na velika i mala slova. Stoga nije isto
ako napišete Godina, GODINA ili godina. Stoga, imena varijabli, isto kao
i imena funkcija moraju biti napisana točno onako kako su napisana za
vrijeme definiranja. Naprimjer, ako ste napisali:
godina = 2010
dakle riječ godina sa svim malim slovima, onda pri uporabi varijable
morate napisati njeno ime svim malim slovima. U protivnom, javit će se
pogreška. Evo jednog takvog primjera:
dan = "Srijeda"
print DAN
Ovdje se dogodilo to da smo definirali varijablu dan sa svim malim
slovima, ali prilikom uporabe napisali smo ju svim velikim slovima, i tu
je došlo do pogreške da varijabla ne postoji. Isto bi se dogodilo da smo
napisali samo jedno veliko slovo a ostala mala.
A pogledajmo sada ovaj primjer:
dan = "Srijeda"
DAN = "Utorak"
print dan
print DAN
Dakle, ovdje imamo varijablu dan napisanu svim malim slovima koja ima
vrijednost Srijeda i DAN napisanu svim velikim slovima koja ima
vrijednost Utorak. Ukoliko se slućajno zabunimo, pa tamo gdje smo htjeli
koristiti DAN sa velikim slovima napišemo dan sa malim slovima, dobit
ćemo vrijednost Srijeda umjesto Utorak, pa će se tako program ponašati
onako kako mi nismo htjeli. Stoga je moja preporuka da program nikada ne
pišete na ovakav način, nego svakoj varijabli dajte drugo ime npr. treci
= "Srijeda", drugi = "Utorak" itd.
Pravila imenovanja varijabli
Imena varijabli mogu sadržavati brojeve, velika i mala slova i znak
donje crte (_), ali ne mogu sadržavati razmake i ostale znakove
interpunkcije. Prvi znak imena varijable mora biti veliko ili malo slovo
engleske abecede ili znak donje crte (_), ali ne može biti broj ili
nešto drugo. Recimo, ovakve varijable ne valjaju:
1dan
dvije rijeci
moja-varijabla
A ovakve varijable valjaju:
z
__moje_ime
mojIndex
godina2010
H2O
Dodjeljivanje vrijednosti postojeće varijable novoj varijabli
Da bi mogao ovo bolje objasniti, pogledajmo ovaj primjer:
x = 5
y = x
print x
print "\n"
print y
Ovdje smo dakle prvo definirali varijablu x i dodijelili joj vrijednost
5. Zatim smo definirali varijablu y i dodijelili joj vrijednost
varijable x, te stoga obje varijable imaju istu vrijednost. To možemo
vidjeti i kada pokrenemo ovakav program, jer će nam na ekranu biti
dvaput napisan broj 5.