Python è un linguaggio molto flessibile che permette la creazione di funzioni praticamente ovunque nel codice. Si può definire una nuova funzione all'interno di un blocco if, di un ciclo for o all'interno di un'altra funzione:
def process(name1, name2, name3):
def greet(name):
if len(name) < 5:
print(f'Hi, {name}')
else:
print('The name is too long')
greet(name1)
greet(name2)
greet(name3)
process('Anna', 'Bob', 'Daniel')
# Hi, Anna
# Hi, Bob
# The name is too long
Qui abbiamo definito una nuova funzione greet() che funge da utilità per non ripetere le istruzioni if ed else per tutti e tre i nomi nella funzione process().
Nota che le funzioni interne hanno accesso a tutte le variabili definite al loro esterno. Quindi, nel nostro esempio, la funzione greet() ha accesso a name1, name2 e name3.
Sfida
Modifica la funzione in modo che restituisca una lista di tutti i divisori dei numeri passati ad essa. Aggiungi una funzione interna che restituisca una lista di divisori per un singolo numero.