⊗pyPmFnCl 23 of 129 menu

Closures i Python

Med closure (closure) forstås en funktion sammen med alle de eksterne variable, der er tilgængelige for den.

I Python, når man siger "funktionsclosure", mener man som oftest ikke selve funktionen, men netop dens eksterne variable.

Lad os sige, at vi har følgende funktion outer, hvor variablen i er erklæret og en indre funktion inner. I den vil i blive øget med en. For at variablen i skal fungere korrekt, tilføjer vi instruktionen nonlocal til den:

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

Lad os nu putte den ydre funktion i variablen res og kalde den med parenteser:

res = outer() res() # udskriver 1

Lad os kalde res flere gange. Efter udførelse af koden hver gang vil tælleren i blive øget med en:

res() # udskriver 2 res() # udskriver 3 res() # udskriver 4

Men der er en vigtig nuance her - hvert kald af funktionen outer vil øge sin egen tæller. Lad os skrive det første kald af outer i variablen res1, og det andet kald - i variablen res2. Derefter udskriver vi dem sekventielt i konsollen:

res1 = outer() res1() # udskriver 1 res1() # udskriver 2 res1() # udskriver 3 res2 = outer() res2() # udskriver 1 res2() # udskriver 2 res2() # udskriver 3

Følgende kode er givet:

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

Sig, hvad der udskrives i konsollen.

Lav en funktion, hvor hvert kald vil returnere det næste Fibonacci-tal.

Lav en funktion, der returnerer et tilfældigt heltal i et interval, men således at der ikke forekommer to ens tal i træk.

Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικά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
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis