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:

pythondef outer():
  def inner():
    return '+++'

  return inner

Să înregistrăm apelul outer în variabila res:

pythonres = outer()
print(res)

După executarea codului, va fi afișat un obiect cu funcția:

python<function outer.<locals>.inner at 0x000001564A212B90>

Dacă însă apelăm variabila res cu paranteze rotunde, va fi returnat mesajul '+++':

pythonprint(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:

pythonres = outer()()
print(res) # va afișa '+++'
Задание 1

Este dat următorul cod:

pythondef outer():
  def inner(num):
    return num + 2

  return inner
  
res = outer()(3)
print(res)

Spuneți ce va fi afișat în consolă.

Задание 2

Este dat următorul cod:

pythondef outer():
  def inner(txt):
    return 'hello, ' + txt

  return inner
  
res = outer()
print(res)

Spuneți ce va fi afișat în consolă.