Sfumature nell'utilizzo delle funzioni interne in Python
In Python possono esistere non solo funzioni
nidificate, ma una funzione può anche restituirne
un'altra. Ad esempio, supponiamo che la funzione outer
restituisca come risultato il codice sorgente
della funzione inner:
def outer():
def inner():
return '+++'
return inner
Assegniamo la chiamata di outer alla
variabile res:
res = outer()
print(res)
Dopo l'esecuzione del codice, verrà visualizzato l'oggetto con la funzione:
<function outer.<locals>.inner at 0x000001564A212B90>
Se invece si chiama la variabile res con
le parentesi tonde, verrà restituito il messaggio
'+++':
print(res()) # restituirà '+++'
È possibile riscrivere il codice in modo che in res
venga assegnata outer con due paia di parentesi
tonde - per chiamare se stessa e la funzione
inner. Ne consegue che si possono
scrivere parentesi tonde aggiuntive
a destra della funzione esterna in base al numero
di funzioni in essa nidificate:
res = outer()()
print(res) # restituirà '+++'
È dato il seguente codice:
def outer():
def inner(num):
return num + 2
return inner
res = outer()(3)
print(res)
Indicare cosa verrà stampato in console.
È dato il seguente codice:
def outer():
def inner(txt):
return 'hello, ' + txt
return inner
res = outer()
print(res)
Indicare cosa verrà stampato in console.