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:
def 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:
def 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:
print(outer([2, 3, 5])) # tulostaa [4, 9, 25]
Kirjoita ulompi ja sisempi funktio, joiden yhteistyö tulostaa jokaisen listan merkkijonoalkion isolla alkukirjaimella.
Annetut funktiot:
def 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.