12.07.2015 Views

Python

Python

Python

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

52 Funkcije6.2 ParametriFormalni parametri koji su jednostavni identikatori navedeni u deniciji funkcije predstavljaju obvezatneparametre, ²to zna£i da svaki poziv funkcije mora pruºiti i odgovaraju¢u vrijednost - (argument)za svaki parametar. Nakon niza ili liste parametara odvojenih zarezima s niti jednim ili s vi²e (obveznih)parametara moºe slijediti jedan ili vi²e slobodnih parametara koji imaju sljede¢u sintaksu:identifikator=izrazNaredba def ra£una, ocjenjuje izraz, te sprema referencu vrijednosti koju izraz vra¢a, koja se zovepretpostavljena vrijednost (eng. default value). Kad poziv funkcije nema argument koji odgovaratakvom slobodnom parametru, onda se identikator argumenta povezuje s tom pretpostavljenom, iliizra£unatom, vrijednosti.Treba primjetiti da se isti objekt, pretpostavljena vrijednost, povezuje sa slobodnim parametromkad god u pozivu funkcije nema pridruºenog argumenta. Ovo dakako, moºe biti nezgodno, ako jepretpostavljena vrijednost promjenljivi objekt, a tijelo funkcije mijenja taj parametar. Na primjer:def f(x, y=[ ]):y.append(x)return yprint f(23) # ispisuje se: [23]prinf f(42) # ispisuje se: [23,42]Druga naredba print ispisuje [23,42] zato jer prvi poziv funkcije f mijenja vrijednost y, koja jeprije bila prazna lista [], a onda dodavanjem 23 poprima tu novu (a pretpostavljenu) vrijednost, panovi poziv uzima zadnje stanje argumenta. Ako je potrebno povezati y s novim objektom liste svakiput kada se f poziva s jednim argumentom, koristi se sljede¢e:def f(x, y=None):if y is None: y = [ ]y.append(x)return yprint f(23) # ispisuje se: [23]prinf f(42) # ispisuje se: [42]Na kraju formalnih parametara u deniciji funkcije, dopu²teno je koristiti jedan ili oba posebnaoblika: *identifikator1 i **iidentifikator2. Ako su obadva na raspolaganju, onaj s dvije zvjezdicemora do¢i zadnji. Parametar *identifikator1 omogu¢uje da poziv funkcije moºe osigurati dodatnepozicijske argumente, dok **identifikator2 omogu¢uje da poziv funkcije moºe osigurati dodatneargumente s imenom. Na taj na£in rje²avaju se pozivi funkcija s promjenljivim, varijabilnim brojemargumenata. Svaki poziv funkcije povezuje identifikator1 s n-tercem £iji su £lanovi dodatni pozicijskiargumenti (ili praznim n-tercem, ako ih nema). Identifikator2 povezuje se s rje£nikom £iji su £lanoviimena i vrijednosti dodatnih argumenata koji se imenuju (ili praznim rje£nikom, ako ih nema). Evokako se pi²e funkcija koja prihva¢a bilo koji broj argumenata i vra¢a njihov zbroj:def zbroj(*broj):rez = 0for x in broj: rez += xreturn rezprint zbroj(23,42) # ispisuje se: 65print zbroj(23,42,15) # ispisuje se: 80Oblik ** dopu²ta konstrukciju rje£nika s klju£evima stringa u obliku koji se lak²e £ita nego standardnarje£ni£ka sintaksa:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!