⊗pyPmFnCl 23 of 129 menu

Zárások a Pythonban

A zárással (closure) olyan függvényt értünk, amely hozzáfér mindegyik külső változójához.

A Pythonban leggyakrabban, amikor egy függvény "zárásáról" beszélünk, nem magára a függvényre gondolunk, hanem pontosan a külső változóira.

Tegyük fel, hogy van egy outer függvényünk, amelyben deklarálunk egy i változót és egy belső inner függvényt. Ebben hozzáadunk egyet a i változóhoz. Ahhoz, hogy a i változó megfelelően működjön, hozzáadjuk a nonlocal utasítást:

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

Most tegyük a külső függvényt egy res változóba, és hívjuk meg kerek zárójelekkel:

res = outer() res() # kiírja az 1-et

Hívjuk meg a res-t többször is. A kód végrehajtása után minden alkalommal a számláló i eggyel növekszik:

res() # kiírja a 2-t res() # kiírja a 3-at res() # kiírja a 4-et

Itt azonban van egy fontos árnyalat - minden egyes outer függvényhívás a saját számlálóját növeli. Az első outer hívást tegyük a res1 változóba, a második hívást pedig a res2 változóba. Ezután írassuk ki őket sorban a konzolra:

res1 = outer() res1() # kiírja az 1-et res1() # kiírja a 2-t res1() # kiírja a 3-at res2 = outer() res2() # kiírja az 1-et res2() # kiírja a 2-t res2() # kiírja a 3-at

Adott a következő 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()

Mondja meg, mi jelenik meg a konzolon.

Készítsen egy függvényt, amely minden hívásakor kiírja a következő Fibonacci-számot.

Készítsen egy függvényt, amely egy intervallumon belül ad vissza véletlen egész számot, úgy, hogy egymás után kétszer ne legyen ugyanaz.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás