Python est un langage très flexible qui permet la création de fonctions pratiquement n'importe où dans le code. On peut définir une nouvelle fonction à l'intérieur d'un bloc if, d'une boucle for, ou à l'intérieur d'une autre fonction :
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
Ici, nous avons défini une nouvelle fonction greet() qui sert d'utilitaire pour ne pas répéter les instructions if et else pour les 3 noms dans la fonction process().
Notez que les fonctions internes ont accès à toutes les variables définies avant elles. Ainsi, dans notre exemple, la fonction greet() a accès à name1, name2 et name3.
Défi
Modifiez la fonction afin qu'elle retourne une liste de tous les diviseurs des nombres qui lui sont passés. Ajoutez une fonction interne qui retourne une liste de diviseurs pour un seul nombre.