⊗pyPmFnCl 23 of 129 menu

Sluitings in Python

Met 'n sluiting (closure) word 'n funksie bedoel tesame met al die eksterne veranderlikes wat daarvoor toeganklik is.

In Python, as hulle sê "sluiting van 'n funksie", bedoel hulle meestal nie die funksie self nie, maar juis sy eksterne veranderlikes.

Kom ons neem die volgende funksie outer, waarin die veranderlike i gedeclareer is en 'n innerlike funksie inner. Daarin sal by i een bygetel word. Sodat die veranderlike i korrek werk, voeg ons die instruksie nonlocal by:

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

Laat ons nou die eksterne funksie in die veranderlike res plaas en dit roep met ronde hakies:

res = outer() res() # sal 1 uitdruk

Laat ons res 'n paar keer roep. Na die uitvoering van die kode sal die teller i elke keer met een vermeerder:

res() # sal 2 uitdruk res() # sal 3 uitdruk res() # sal 4 uitdruk

Daar is egter 'n belangrike nuans - elke roep van die funksie outer sal sy eie teller vermeerder. Laat ons die eerste roep van outer in die veranderlike res1 skryf, en die tweede roep - in die veranderlike res2. Dan druk ons hulle opeenvolgend in die konsole uit:

res1 = outer() res1() # sal 1 uitdruk res1() # sal 2 uitdruk res1() # sal 3 uitdruk res2 = outer() res2() # sal 1 uitdruk res2() # sal 2 uitdruk res2() # sal 3 uitdruk

Die volgende kode word gegee:

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

Sê wat in die konsole uitgedruk sal word.

Maak 'n funksie waarvan elke roep die volgende Fibonacci-getal sal gee.

Maak 'n funksie wat 'n ewekansige heelgetal in 'n reeks sal gee, maar sodat daar nie twee keer agtereenvolgens dieselfde een is nie.

Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικά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
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp