Funzioni all'interno di funzioni

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.
def divisors(*numbers):
    ...

print(divisors(4, 5))         # [1, 2, 4, 1, 5]
print(divisors(3))            # [1, 3]
print(divisors(6, 8))         # [1, 2, 3, 6, 1, 2, 4, 8]
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue