Funktio funktion sisällä Pythonissa

Pythonissa yhden funktion sisällä voidaan määritellä toisia. Oletetaan, että meillä on ulompi funktio outer, jonka sisällä on funktio inner:

pythondef outer():
  def inner():
    pass

Yllä oleva esimerkki näyttää melko yksinkertaiselta. Kuitenkin usein tilanteissa, joissa funktion outer rungossa inner:n lisäksi suoritetaan muita toimintoja. Koodin yksinkertaistamiseksi voitaisiin siirtää inner ulompaan koodilohkoon, mutta tätä funktiota käytetään vain kerran ja vain funktion outer sisällä. Siksi sen siirtämisellä ulkopuolelle ei ole järkeä.

Katsotaanpa esimerkkiä, jossa funktiolle outer välitetään lista. Ja funktion inner avulla listan numeerinen alkio korotetaan neliöön. Tätä varten funktion inner jälkeen määritellään tyhjä lista res, johon kerätään silmukassa neliöön korotetut alkiot:

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

  res = []

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

  return res

Kutsutaan funktiota outer, välitetään sille parametrina lista ja tulostetaan tulos konsoliin:

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

Kirjoita ulompi ja sisempi funktio, joiden yhteistyö tulostaa jokaisen listan merkkijonoalkion isolla alkukirjaimella.

Задание 2

Annetut funktiot:

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

  return res

Kirjoita koodi uudelleen siten, että func1 olisi func2:n sisäinen funktio.