⊗pyPmFnCl 23 of 129 menu

Closure u Pythonu

Pod closure-om (closure) podrazumevaju funkciju zajedno sa svim spoljnim promenljivim koje su joj dostupne.

U Pythonu, najčešće, kada kažu "closure funkcije", nemaju u vidu samu tu funkciju, već upravo njene spoljne promenljive.

Neka imamo sledeću funkciju outer, u kojoj je deklarisana promenljiva i i unutrašnja funkcija inner. U njoj će se i uvećati za jedan. Kako bi promenljiva i korektno radila, dodajemo joj instrukciju nonlocal:

def outer(): i = 0 def inner(): nonlocal i i += 1 print(i) return inner

Sada stavimo spoljnu funkciju u promenljivu res i pozovimo je sa zagradama:

res = outer() res() # ispisaće 1

Pozovimo res nekoliko puta. Posle izvršenja koda brojač i će se svaki put povećavati za jedan:

res() # ispisaće 2 res() # ispisaće 3 res() # ispisaće 4

Međutim, ovde postoji važan detalj - svaki poziv funkcije outer će povećavati svoj brojač. Neka prvi poziv outer upišemo u promenljivu res1, a drugi poziv - u promenljivu res2. Zatim ispisujemo ih redom u konzolu:

res1 = outer() res1() # ispisaće 1 res1() # ispisaće 2 res1() # ispisaće 3 res2 = outer() res2() # ispisaće 1 res2() # ispisaće 2 res2() # ispisaće 3

Dat je sledeći kod:

def outer(): i = 10 def inner(): nonlocal i i -= 2 print(i) return inner res1 = outer() res1() res1() res2 = outer() res2() res2() res2()

Recite šta će se ispisati u konzolu.

Napravite funkciju čiji će svaki poziv davati sledeći Fibonačijev broj.

Napravite funkciju koja će davati slučajan ceo broj u opsegu, ali tako da dva puta uzastopno nisu isti.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij