⊗pyPmFnCl 23 of 129 menu

Zaprtja v Pythonu

Z zaprtjem (closure) razumemo funkcijo skupaj z vsemi zunanjimi spremenljivkami, ki so ji dostopne.

V Pythonu običajno, ko rečejo "zaprtje funkcije", ne mislijo na samo funkcijo, ampak ravno na njene zunanje spremenljivke.

Recimo, da imamo naslednjo funkcijo outer, v kateri je deklarirana spremenljivka i in notranja funkcija inner. V njej se bo k i prištevala ena. Da bi spremenljivka i pravilno delovala, dodamo k njej stavek nonlocal:

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

Zdaj pa dajmo zunanjo funkcijo v spremenljivko res in jo pokličimo z okroglimi oklepaji:

res = outer() res() # izpiše 1

Pokličimo res večkrat. Po izvedbi koda bo števec i vsakič narasel za ena:

res() # izpiše 2 res() # izpiše 3 res() # izpiše 4

Vendar pa je tu pomemben odtenek - vsak klic funkcije outer bo povečal svoj števec. Naj bo prvi klic outer zapisan v spremenljivko res1, drugi klic pa v spremenljivko res2. Nato zaporedoma izpišimo njihove vrednosti v konzolo:

res1 = outer() res1() # izpiše 1 res1() # izpiše 2 res1() # izpiše 3 res2 = outer() res2() # izpiše 1 res2() # izpiše 2 res2() # izpiše 3

Podana je naslednja koda:

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

Povejte, kaj se bo izpisalo v konzolo.

Naredite funkcijo, katere vsak klic bo vrnil naslednje Fibonaccijevo število.

Naredite funkcijo, ki bo vračala naključno celo število v danem intervalu, vendar tako, da zaporedoma ne bo dveh enakih.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni