ფუნქცია ფუნქციაში 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-ისთვის.