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.