⊗pyPmFnCl 23 of 129 menu

Closures in Python

Onder sluiting (closure) verstaat men een functie samen met alle externe variabelen die voor haar toegankelijk zijn.

In Python bedoelt men, wanneer men "sluiting van een functie" zegt, vaker niet de functie zelf, maar juist haar externe variabelen.

Stel we hebben de volgende functie outer, waarin variabele i is gedeclareerd en een innerlijke functie inner. Hierin wordt aan i één opgeteld. Om ervoor te zorgen dat variabele i correct werkt, voegen we er de instructie nonlocal aan toe:

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

Laten we nu de externe functie in variabele res zetten en haar aanroepen met ronde haken:

res = outer() res() # geeft 1 weer

Laten we res meerdere keren aanroepen. Na uitvoering van de code zal de teller i elke keer met één toenemen:

res() # geeft 2 weer res() # geeft 3 weer res() # geeft 4 weer

Er is hier echter een belangrijk nuance - elke aanroep van de functie outer zal haar eigen teller verhogen. Laten we de eerste aanroep van outer in variabele res1 zetten, en de tweede aanroep - in variabele res2. Vervolgens geven we ze sequentieel weer in de console:

res1 = outer() res1() # geeft 1 weer res1() # geeft 2 weer res1() # geeft 3 weer res2 = outer() res2() # geeft 1 weer res2() # geeft 2 weer res2() # geeft 3 weer

De volgende code is gegeven:

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

Zeg, wat er in de console wordt weergegeven.

Maak een functie, waarvan elke aanroep het volgende Fibonacci-getal oplevert.

Maak een functie die een willekeurig geheel getal in een interval geeft, maar zodanig dat er niet twee keer achter elkaar dezelfde zijn.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren