Funktsioon funktsioonis Pythonis

Pythonis saab ühe funktsiooni sees deklareerida teisi. Olgu meil väline funktsioon outer, mille sees asub funktsioon inner:

pythondef outer():
  def inner():
    pass

Ülaltoodud näide näeb välja piisavalt lihtne. Siiski esineb sageli olukordi, kus funktsiooni outer kehas lisaks funktsioonile inner tehakse ka muid operatsioone. Koodi lihtsustamiseks võiks funktsiooni inner viia välimisse koodiplokki, kuid seda funktsiooni kasutatakse ainult üks kord ja ainult funktsiooni outer sees. Seega pole mõtet seda välja viia.

Vaatleme näidet, kui funktsioonile outer antakse ette loend. Ja funktsiooni inner abil tõstetakse loendi numbriline element ruutu. Selleks deklareerime funktsiooni inner järel tühja loendi res, kuhu hakkatakse koguma tsüklis ruutu tõstetud elemente:

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

  res = []

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

  return res

Kutsume funktsioon outer, edastame sellele parameetrina loendi ja väljastame tulemi konsooli:

pythonprint(outer([2, 3, 5])) # väljastab [4, 9, 25]
Задание 1

Kirjutage väline ja sisemine funktsioon, mille ühine töö väljastab iga loendis oleva sõnelise elemendi suure algustähega.

Задание 2

Antud funktsioonid:

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

  return res

Kirjutage kood ümber nii, et func1 oleks func2 sisemine funktsioon.