⊗pyPmFnCl 23 of 129 menu

Lukking i Python

Med lukking (closure) mener man en funksjon sammen med alle de eksterne variablene som er tilgjengelige for den.

I Python, når man sier "funksjonslukking", mener man som oftest ikke selve funksjonen, men nettopp dens eksterne variabler.

La oss si at vi har følgende funksjon outer, der variabelen i er deklarert og en indre funksjon inner. I den vil i bli økt med én. For at variabelen i skal fungere korrekt, legger vi til setningen nonlocal:

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

La oss nå legge den ytre funksjonen i variabelen res og kalle den med parenteser:

res = outer() res() # skriver ut 1

La oss kalle res flere ganger. Etter kjøring av koden vil telleren i økes med én hver gang:

res() # skriver ut 2 res() # skriver ut 3 res() # skriver ut 4

Det er imidlertid en viktig nyanse her - hvert kall til funksjonen outer vil øke sin egen teller. La oss skrive det første kallet til outer i variabelen res1, og det andre kallet - i variabelen res2. Deretter skriver vi dem sekvensielt til konsollen:

res1 = outer() res1() # skriver ut 1 res1() # skriver ut 2 res1() # skriver ut 3 res2 = outer() res2() # skriver ut 1 res2() # skriver ut 2 res2() # skriver ut 3

Følgende kode er gitt:

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

Si hva som skrives ut i konsollen.

Lag en funksjon hvor hvert kall vil gi det neste Fibonacci-tallet.

Lag en funksjon som gir et tilfeldig heltall i et intervall, men slik at det ikke er det samme to ganger på rad.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis