Definisanje podrazumevanih vrednosti argumenata funkcije

9.4 Definisanje podrazumevanih vrednosti argumenata funkcije 

Sada kada smo naučili da je najpametniji način komunikacije programa sa funkcijom kroz argumente prilikom pozivanja te funkcije, možemo malo da „uđemo“ i u tu filozofiju vezanu za argumenate i parametre.
Prvi slučaj je sledeći: zamisli da imaš neku funkciju koja predstavlja tvoj doručak. Ti voliš da jedeš kajganu, i zato bi bilo prilično glupo da ti svaki dan kažeš – daj mi za doručak kajganu, umesto toga, brže i pametnije je da sedneš za sto i da dobiješ kajganu. Jedino ako ti je kajgane već preko glave, ti kažeš – daj mi za doručak sendvič! Na istu foru, u nekim funkcijama ćeš želeti da njeni parametri budu opcioni i da funkcija koristi neke podrazumevane (default) vrednosti, za slučaj da ne želimo da konstantno prosleđujemo iste vrednosti za njih. To postižemo definisanjem podrazumevanih vrednosti argumenata i to na sledeći način: prilikom definisanja funkcije mi definišemo podrazumevanu vrednost parametra tako što dodamo željenom imenu parametra operator dodele (=), iza koga sledi podrazumevana vrednost koju želimo da joj dodelimo.
To izgleda ovako:
def funkcija(parametar = neka_vrednost):
    blok_funkcije
Što bi u našem primeru sa doručkom izgledalo:
>>> def doručak(jelo = 'kajgana'): 
...     print('Evo ti', jelo) 
... 
>>> doručak() 
Evo ti kajgana 
>>> doručak('sendvič') 
Evo ti sendvič 
>>> doručak() 
Evo ti kajgana 
>>> 
Vidiš da kada pozoveš funkciju bez ikakvog argumenta, dobijaš ono što najviše voliš, ukoliko želiš nešto drugo – samo kažeš i eto ga.  
Imaj na umu da definisana podrazumevana vrednost argumenta mora da bude konstanta. Preciznije rečeno, podrazumevana vrednost treba da bude nepromenljiv tip podatka – o ovim vrstama podataka ću detaljnije objašnjavati kasnije. Za sada, samo treba da zapamtiš ovu informaciju. 
Ali, šta se dešava kada želimo da imamo funkciju koju želimo da pozivamo sa više argumenata? Na primer, u zavisnosti od toga, koliko smo gladni, mi možda danas želimo 2 pržena jajeta, sutra 3? Pa, to i nije problem:
>>> def doručak(jelo, količina = 1): 
...     print(('Evo ti ' + jelo + '\n') * količina) 
... 
>>> doručak('kajgana') 
Evo ti kajgana 

>>> doručak('kajgana', 6) 
Evo ti kajgana 
Evo ti kajgana 
Evo ti kajgana 
Evo ti kajgana 
Evo ti kajgana 
Evo ti kajgana 

>>> 
Funkcija koju smo nazvali doručak koristimo za prikaz stringa, koji će biti ponovljen onoliko puta koliko navedemo prilikom njenog pozivanja. Ako je pozovemo, i pri tom mi ne navedemo vrednost za parametar količina, onda će se, po defaultu, string prikazati samo jednom.
Prilikom prvog pozivanja funkcije doručak, mi smo joj prosledili samo string kao argument, i ona nam je prikazala taj string samo jednom. Prilikom drugog pozivanja funkcije doručak, mi smo prosledili argumente i string i argument vrednosti 6, koji našoj funkciji govori da želimo da našu poruku treba da prikaže 6 puta. 

Važno!

Ukoliko je potrebno pozivati funkciju sa više argumenata, od kojih neki mogu da imaju podrazumevane vrednosti, a neki ne, postoji strogo pravilo koga moramo da se držimo prilikom definisanja te funkcije.
Samo onim parametrima u definiciji funkcije, koji su na kraju liste parametara možemo da definišemo podrazumevane vrednosti, odnosno, ne možemo imati parametar sa podrazumevanom vrednošću koji se nalazi ispred parametra bez definisane podrazumevane vrednosti u listi parametara.
Drugim rečima:
>>> def puta(a, b = 1): 
...     print(a * b) 
... 
>>> puta(2) 
2 
>>> def puta(a = 1, b): 
...     print(a * b) 
... 
  File "<stdin>", line 1 
SyntaxError: non-default argument follows default argument 
>>> 
Prva definicija je ispravna, dok druga definicija funkcije nije. To se dešava zato što se, prilikom pozivanja funkcije, vrednosti parametara dodeljuju na osnovu njihovog položaja u definiciji. Pa ako definišemo: def funk(a, b=5) – što je ispravno, jer pozivanjem funk(7) vrednosti a će biti dodeljen broj 7, dok je b podrazumevano 5. Ali ako definišemo def funk(a=5, b), a potom pozovemo sa funk(8), vrednost promenljive a postaje 8, ali, čekaj, šta ćemo sa b? Znači, drugi slučaj je nerazumljiv sa stanovišta Pythona.
9.3 Globalne promenljive Indeks 9.5 Poziv funkcije
pomoću ključnih reči

Коментари

Popularno

Audacious - program za slušanje muzike

LibreOffice Calc - program za izradu tabela

Brasero - program za rezanje CD-ova

Bekstvo iz Titela

Minitube - program za praćenje YouTube sadržaja

Idemo

Kako blokirati neželjene oglase koje AdSense pokazuje na Vašoj web lokaciji

Bezimena

Pozadina Bekstva iz titela

Pažljivo sa MS Word dokumentima koje primate putem elektronske pošte