Тънкости при работа с вътрешни функции в Python

В Python може да има не само вложени функции, но и една функция може да връща друга. Например, нека функцията outer връща като резултат изходния код на функцията inner:

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

  return inner

Нека запишем извикването на outer в променлива res:

pythonres = outer()
print(res)

След изпълнение на кода ще се изведе обект с функция:

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

Ако променливата res се извика със кръгли скоби, ще се върне съобщението '+++':

pythonprint(res()) # ще изведе '+++'

Може да се пренапише кода така, че в res да се записва outer с две кръгли скоби - за извикване на самата себе си и функцията inner. От което следва, че може да се записват допълнителни кръгли скоби отдясно на външната функция според броя на вложените в нея функции:

pythonres = outer()()
print(res) # ще изведе '+++'
Задание 1

Даден е следният код:

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

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

Кажете какво ще се изведе в конзолата.

Задание 2

Даден е следният код:

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

  return inner
  
res = outer()
print(res)

Кажете какво ще се изведе в конзолата.