Nuanțe în lucrul cu funcțiile interne în Python
În Python pot exista nu numai funcții
imbricate, dar și o funcție poate returna
alta. De exemplu, să presupunem că funcția outer
returnează ca rezultat codul sursă al
funcției inner:
def outer():
def inner():
return '+++'
return inner
Să înregistrăm apelul outer în
variabila res:
res = outer()
print(res)
După executarea codului, va fi afișat un obiect cu funcția:
<function outer.<locals>.inner at 0x000001564A212B90>
Dacă însă apelăm variabila res cu
paranteze rotunde, va fi returnat mesajul
'+++':
print(res()) # va afișa '+++'
Putem rescrie codul astfel încât în res
să se înregistreze outer cu două perechi de paranteze
rotunde - pentru apelarea ei înseși și a funcției
inner. De aici rezultă că putem
scrie paranteze rotunde suplimentare
în dreapta funcției exterioare, în număr corespunzător
funcțiilor imbricate în ea:
res = outer()()
print(res) # va afișa '+++'
Este dat următorul cod:
def outer():
def inner(num):
return num + 2
return inner
res = outer()(3)
print(res)
Spuneți ce va fi afișat în consolă.
Este dat următorul cod:
def outer():
def inner(txt):
return 'hello, ' + txt
return inner
res = outer()
print(res)
Spuneți ce va fi afișat în consolă.