Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
6.5. Poziv funkcije 55f(a, b)print a, b # ispisuje se: 77 [99, 42]Naredba print pokazuje da je a jo² uvijek povezano sa 77, iako se kao parametar x proslijedila ufunkciju f(x,y). Re-povezivanje funkcijskog parametra x na 23 nema efekta s obzirom na poziv funkcijef, jer je x lokalna varijabla funkcije.Mežutim, naredba print takožer pokazuje da je b sad povezano s [99,42]. Objekt b je jo² uvijekpovezan s istim objektom liste kao i prije poziva, ali se taj objekt mijenjao, jer se unutar funkcije fpridodao 42 na taj objekt liste. U oba slu£aja, f nije izmijenio poveznice pozivatelja, niti f moºeizmijeniti broj 77, jer su brojevi nepromjenljivi. Ali, f moºe izmijeniti objekt liste, jer su objekti listepromjenljivi. U ovom primjeru, f mijenja objekt liste koji pozivatelj prenosi na f kao drugi argumentpozivaju¢i append metodu objekta.6.5.2 Vrste argumenataUpravo opisani argumenti zovu se pozicijski argumenti. Svakom pozicijskom argumentu pridruºuje sevrijednost parametra koji mu odgovara po poziciji (redoslijedu) u deniciji funkcije. U pozivu funkcijes nula ili vi²e pozicijskih argumenata mogu slijediti jedan ili vi²e imenovanih argumenata sa sljede¢omsintaksom:identifikator=izrazidentifikator mora biti jedno od imena formalnih parametara koja se koriste u def naredbifunkcije. izraz daje vrijednost formalnom parametru.Poziv funkcije mora pruºiti, putem pozicijskih i/ili imenovanih argumenata, to£no jednu vrijednostza svaki obvezatni parametar, te nula ili jednu vrijednost za svaki slobodno izabrani parametar. Naprimjer:def divide(divisor, dividend): return dividend // divisorprint divide(12,94) # ispisuje se: 7print divide(dividend=94, divisor=12) # ispisuje se: 7O£evidno je da su ova dva poziva za dijeljenje ekvivalentna. Imenovani argumenti £esto se pi²u usvrhu £itljivosti, kada se £itljivost i razumljivost napisanog kôda moºe pove¢ati identikacijom uloge iupravljanjem redoslijeda argumenata. Treba primjetiti, kako kod poziva imenovanih arguemanta nijebitan redoslijed njihova pisanja. ƒe²ta uporaba imenovanih argumenata je u svrhu povezivanja izabranihparametara s posebnim vrijednostima, dok drugi slobodni parametri uzimaju svoje pretpostavljenevrijednosti:def f(middle, begin='init', end='finis'): return begin+middle+endprint f('tini', end='')# ispisuje se: inittiniZahvaljuju¢i imenovanom argumentu end= pozivatelj moºe specicirati vrijednost, u ovom slu£ajuto je prazan string ' ' za funkcijski (tre¢i) parametar end, te jo² uvijek dopustiti funkcijskom (drugom)parametru begin, kori²tenje njegove pretpostavljne vrijednosti, stringu 'init'. Na kraju argumenata upozivu funkciji, po izboru se moºe koristiti bilo koji (ili oba) posebna oblika *niz i **rj. Ako su obaprisutna, onaj sa dvije zvjezdice mora do¢i na zadnjem mjestu.Parametar *niz prenosi £lanove niz kao pozicijske argumente funkcije (poslije obi£nih pozicijskihargumenata, ako ih ima). Pritom niz moºe biti bilo kakav niz ili iterator.S druge pak strane, **rj prenosi £lanove rj kao imenovane argumente funkcije, gdje rj morabiti rje£nik £iji su svi klju£evi stringovi. Klju£ svakog £lana je ime parametra, a vrijednost tog £lanaje vrijednost argumenta. Ponekad je potrebno prenijeti argument oblika *niz ili **rj kad formalniparametri koriste sli£ne oblike. Na primjer, koriste¢i funkciju zbroj() moºe se ispisati zbroj svihvrijednosti u rije£niku d. Ovo se postiºe vrlo jednostavno sa *niz oblikom: