⊗pyPmFnCl 23 of 129 menu

Uzávěry v Pythone

Pod uzávierkou (closure) sa rozumie funkcia spolu so všetkými vonkajšími premennými, ktoré sú jej prístupné.

V Pythone sa najčastejšie, keď sa hovorí "uzávierka funkcie", nemyslí táto funkcia sama, ale práve jej vonkajšie premenné.

Nech máme nasledujúcu funkciu outer, v ktorej je deklarovaná premenná i a vnútorná funkcia inner. V nej sa k i bude pričítať jednotka. Aby premenná i korektne fungovala, pridáme k nej inštrukciu nonlocal:

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

Teraz dajme vonkajšiu funkciu do premennej res a zavolajme ju s okrúhlymi zátvorkami:

res = outer() res() # vypíše 1

Dajme niekoľkokrát zavolať res. Po vykonaní kódu sa zakaždým počítadlo i zvýši o jednotku:

res() # vypíše 2 res() # vypíše 3 res() # vypíše 4

Avšak je tu dôležitá nuansa - každé volanie funkcie outer bude zvyšovať svoje počítadlo. Dajme prvé volanie outer zapísať do premennej res1, a druhé volanie - do premennej res2. Potom postupne vypíšme ich do konzoly:

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

Daný je nasledujúci kód:

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

Povedzte, čo sa vypíše do konzoly.

Urobte funkciu, ktorej každé volanie bude vypisovať nasledujúce Fibonacciho číslo.

Urobte funkciu, ktorá bude vypisovať náhodné celé číslo v intervale, ale tak, aby sa dva krát po sebe neopakovalo to isté.

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
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť