⊗pyPmFnCl 23 of 129 menu

Sulendid Pythonis

Sulendiga (closure) mõistetakse funktsiooni koos kõigi talle kättesaadavate väliste muutujatega.

Pythonis mõeldakse enamasti "funktsiooni sulendi" all mitte funktsiooni ennast, vaid just tema välimisi muutujaid.

Olgu meil järgmine funktsioon outer, kuses on deklareeritud muutuja i ja sise funktsioon inner. Selles lisatakse i-le üks. Et muutuja i töötaks korrektselt, lisame sellele käsu nonlocal:

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

Nüüd paneme välimise funktsiooni muutujasse res ja kutsume selle välja ümara sulgudega:

res = outer() res() # väljastab 1

Kutsume res mitu korda välja. Pärast koodi täitmist suurendab loendur i iga kord ühe võrra:

res() # väljastab 2 res() # väljastab 3 res() # väljastab 4

Siin on aga oluline nüanss - iga funktsiooni outer väljakutse suurendab oma loendurit. Paneme esimese outer väljakutse muutujasse res1 ja teise väljakutse - muutujasse res2. Seejärel väljastame need järjest konsooli:

res1 = outer() res1() # väljastab 1 res1() # väljastab 2 res1() # väljastab 3 res2 = outer() res2() # väljastab 1 res2() # väljastab 2 res2() # väljastab 3

Antud on järgmine kood:

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

Öelge, mis konsooli väljastatakse.

Tehke funktsioon, mille iga väljakutse annab järgmise Fibonacci arvu.

Tehke funktsioon, mis annab juhusliku täisarvu vahemikus, kuid nii, et kaks korda järjest ei oleks sama.

Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu