⊗pyPmFnCl 23 of 129 menu

Uždarosios funkcijos Python kalboje

Uždarąja funkcija (closure) vadinama funkcija kartu su visomis jai prieinamomis išorinėmis kintamųjomis.

Python kalboje, sakant "funkcijos uždarumas", dažniausiai turimos omenyje ne pati funkcija, o būtent jos išorinės kintamosios.

Tarkime, kad turime šią funkciją outer, kurioje deklaruojama kintamoji i ir vidinė funkcija inner. Joje prie i bus pridedamas vienetas. Kad kintamoji i veiktų korektiškai, pridedame prie jos instrukciją nonlocal:

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

Dabar sudėkime išorinę funkciją į kintamąjį res ir iškvikime ją su apvaliaisiais skliaustais:

res = outer() res() # išves 1

Keliskart iškvieskime res. Po kodo vykdymo kaskart skaitiklis i bus didinamas vienetu:

res() # išves 2 res() # išves 3 res() # išves 4

Tačiau čia yra svarbus niuansas – kiekvienas funkcijos outer iškvietimas didins savo skaitiklį. Pirmąjį outer iškvietimą įrašykime į kintamąjį res1, o antrąjį iškvietimą – į kintamąjį res2. Tada pačiame eiliškumame išveskime juos į konsolę:

res1 = outer() res1() # išves 1 res1() # išves 2 res1() # išves 3 res2 = outer() res2() # išves 1 res2() # išves 2 res2() # išves 3

Duotas toks kodas:

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

Pasakykite, kas išves į konsolę.

Sukurkite funkciją, kurios kiekvienas iškvietimas grąžins sekantį Fibonačio skaičių.

Sukurkite funkciją, kuri generuos atsitiktinį sveikąjį skaičių intervale, bet taip, kad du kartus iš eilės nebūtų vienodų.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti