Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
6.6. Ugnjeºžene funkcije 57preko funkcijskih parametara/argumenata ugnjeºdene funkcije. Vrijednost argumenta moºe se povezatikada se ugnjeºžena funkcija denira s pretpostavljenom vrijednosti za izabrani argument. Na primjer:def postotak_1(a, b, c):def pc(x, ukupno=a+b+c): return (x*100.0) / ukupnoprint "Postotci su: ", pc(a), pc(b), pc(c)Isti program s upotrebom ugnjeºženih dosega izgledao bi ovako:def postotak_2(a, b, c):def pc(x): return (x*100.0) / (a+b+c)print "Postotci su: ", pc(a), pc(b), pc(c)U ovom slu£aju, postotak_1 ima malu prednost: izra£un a+b+c dogaža se samo jednom, dok kodpostotak_2 nutarnja funkcija pc ponavlja izra£un tri puta. Mežutim, ako vanjska funkcija re-povezujesvoje lokalne varijable izmežu poziva ugnjeºžene funkcije, ponavljanje izra£una bi mogla biti i prednost.To zna£i da se preporu£uje znanje oba pristupa, te izbor najprikladnijeg u danoj situaciji.Ugnjeºžena funkcija koja pristupa vrijednostima s vanjskih lokalnih varijabla poznata kao je zatvorenafunkcija ili closure. Sljede¢i primjer pokazuje kako izgraditi closure bez ugnjeºženih dosega(koriste¢i pretpostavljenu vrijednost):def make_adder_1(augend):def add(addend, _augend=augend): return addend+_augendreturn addIsta funkcija kori²tenjem ugnjeºženih dosega izgleda ovako:def make_adder_2(augend):def add(addend): return addend+augendreturn addClosures su iznimke u op¢em pravilu, jer su objektno-orjentirani mehanizmi najbolji na£in povezivanjapodataka i kôda zajedno. Kada se trebaju konstruirati pozivni objekti, s nekim parametrimau vremenu konstrukcije objekta, closures mogu biti ekasnije i jednostavnije od klasa. Na primjer,rezultat make_adder_1(7) je funkcija koja prihva¢a jedan argument i dodaje 7 na taj argument (rezultatmake_adder_2(7) se pona²a na isti na£in). Closure je "tvornica" za bilo kojeg £lana obiteljifunkcija koji se razlikuju po nekim parametrima, te moºe pomo¢i u izbjegavanju dvostrukog pisanjaprogramskog kôda.