Nianse pri delu z notranjo funkcijo v Python
V Pythonu lahko niso le ugnezdeni
funkciji, ampak lahko ena funkcija vrne
drugo. Na primer, naj funkcija outer
vrne kot rezultat izvorno kodo
funkcije inner:
def outer():
def inner():
return '+++'
return inner
Zapišimo klic outer v
spremenljivko res:
res = outer()
print(res)
Po izvedbi kode se bo izpisal objekt s funkcijo:
<function outer.<locals>.inner at 0x000001564A212B90>
Če pa pokličemo spremenljivko res z
okroglimi oklepaji, se vrne sporočilo
'+++':
print(res()) # izpiše '+++'
Kodo lahko prepišemo tako, da se v res
zapiše outer z dvema okroglima
oklepajema - za klic same sebe in funkcije
inner. Iz tega sledi, da lahko
zapišemo dodatne okrogle oklepaje
desno od zunanje funkcije glede na število
vanjo ugnezdenih funkcij:
res = outer()()
print(res) # izpiše '+++'
Podana je naslednja koda:
def outer():
def inner(num):
return num + 2
return inner
res = outer()(3)
print(res)
Povejte, kaj se izpiše v konzolo.
Podana je naslednja koda:
def outer():
def inner(txt):
return 'hello, ' + txt
return inner
res = outer()
print(res)
Povejte, kaj se izpiše v konzolo.