⊗pyPmFnCl 23 of 129 menu

Uzávěry v Pythonu

Pod pojmem uzávěr (closure) se rozumí funkce spolu se všemi vnějšími proměnnými, které jsou jí přístupné.

V Pythonu nejčastěji, když se řekne "uzávěr funkce", nemyslí se tím samotná funkce, ale právě její vnější proměnné.

Předpokládejme, že máme následující funkci outer, ve které je deklarována proměnná i a vnitřní funkce inner. V ní se k i přičte jedna. Aby proměnná i fungovala správně, přidáme k ní příkaz nonlocal:

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

Nyní vložme vnější funkci do proměnné res a zavolejme ji s kulatými závorkami:

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

Zavolejme res několikrát. Po provedení kódu se čítač i pokaždé zvýší o jednu:

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

Je zde však důležitá nuance - každé volání funkce outer zvýší svůj vlastní čítač. Zapišme první volání outer do proměnné res1 a druhé volání - do proměnné res2. Poté je postupně vypišme do konzole:

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

Je dán následující 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()

Řekněte, co se vypíše do konzole.

Vytvořte funkci, jejíž každé volání bude vracet další Fibonacciho číslo.

Vytvořte funkci, která bude vracet náhodné celé číslo v intervalu, ale tak, aby se dvakrát po sobě neobjevilo stejné.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout