⊗pyPmFnCl 23 of 129 menu

Closure i Python

Med closure (closure) menas en funktion tillsammans med alla externa variabler som är tillgängliga för den.

I Python, när man säger "funktions closure", menar man oftast inte själva funktionen, utan just dess externa variabler.

Låt oss säga att vi har följande funktion outer, där variabeln i är deklarerad och en inre funktion inner. I den kommer i att ökas med ett. För att variabeln i ska fungera korrekt, lägger vi till satsen nonlocal:

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

Låt oss nu sätta den yttre funktionen i variabeln res och anropa den med runda parenteser:

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

Låt oss anropa res flera gånger. Efter att koden har körts kommer räknaren i att ökas med ett varje gång:

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

Men det finns en viktig nyans här - varje anrop till funktionen outer kommer att öka sin egen räknare. Låt oss sätta det första anropet till outer i variabeln res1, och det andra anropet - i variabeln res2. Sedan skriver vi ut dem i konsolen sekventiellt:

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öljande kod ges:

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

Säg vad som skrivs ut i konsolen.

Skapa en funktion, där varje anrop ger nästa Fibonacci-tal.

Skapa en funktion som ger ett slumpmässigt heltal i ett intervall, men så att samma tal inte förekommer två gånger i rad.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa