Nyanser vid arbete med inre funktioner i Python
I Python kan det finnas inte bara nästlade
funktioner, utan en funktion kan också returnera
en annan. Till exempel, låt funktionen outer
returnera som resultat källkoden för
funktionen inner:
def outer():
def inner():
return '+++'
return inner
Låt oss registrera anropet outer i
variabeln res:
res = outer()
print(res)
Efter att koden har körts kommer ett objekt med funktionen att skrivas ut:
<function outer.<locals>.inner at 0x000001564A212B90>
Om man anropar variabeln res med
runda parenteser, så returneras meddelandet
'+++':
print(res()) # skriver ut '+++'
Koden kan skrivas om så att res
registreras som outer med två runda
parenteser - för att anropa sig själv och funktionen
inner. Av detta följer att man kan
lägga till ytterligare runda parenteser
till höger om den yttre funktionen, motsvarande antalet
funktioner som är nästlade i den:
res = outer()()
print(res) # skriver ut '+++'
Följande kod ges:
def outer():
def inner(num):
return num + 2
return inner
res = outer()(3)
print(res)
Säg vad som skrivs ut i konsolen.
Följande kod ges:
def outer():
def inner(txt):
return 'hello, ' + txt
return inner
res = outer()
print(res)
Säg vad som skrivs ut i konsolen.