Функсия дар функсия дар Python

Дар Python дохили як функсияҳо метавон дигаронро эълон кард. Бигзор мо функсияи беруна дорем outer, ки дохили он функсияи inner ҷойгир аст:

pythondef outer():
  def inner():
    pass

Мисоли дар боло овардашуда хеле содда менамояд. Аммо аксар вақт ҳолатҳое рух медиҳанд, ки дар бадани функсия outer ғайр аз inner амалиётҳои дигар низ иҷро мешаванд. Барои содда кардани код шояд метавонист inner-ро ба блоки берунаи код барорид, аммо ин функсия танҳо як маротиба истифода бурда мешавад ва танҳо дар дохили функсияи outer. Аз ин рӯ, бароридани он аз ҳудудҳои он маъно надорад.

Биёед мисолеро дида бароем, ки ба функсияи outer рӯйхат дода мешавад. Ва бо ёрии функсияи inner унсури ададии рӯйхат ба дараҷаи квадратӣ мерасад. Барои ин пас аз функсияи inner рӯйхати холӣ res-ро эълон мекунем, ки дар он унсурҳо, ба дараҷаи квадратӣ баровардашуда, дар сикл ҷамъ хоҳанд шуд:

pythondef outer(lst):
  def inner(num):
    return num ** 2

  res = []

  for el in lst:
    res.append(inner(el))

  return res

Биёед функсияи outer-ро фарохонем, ба он параметри рӯйхатро гузаронем ва натиҷаро ба консол чоп кунем:

pythonprint(outer([2, 3, 5])) # [4, 9, 25]-ро бармеоранд
Задание 1

Функсияи беруна ва дохилиеро нависед, ки коргузории муштараки онҳо ҳар унсури сатрӣи рӯйхатро бо ҳарфи калон бароранд.

Задание 2

Функсияҳо дода шудаанд:

pythondef func1(num):
  if num > 0:
    num += 2
  return num
  
def func2(iter):
  res = []
  for el in iter:
    res.append(func1(el))

  return res

Кодро аз нависед, то func1 функсияи дохилӣ барои func2 шавад.