Skip to content

Référence vers une fonction

Énoncé

Dans cet exercice nous allons voir qu'il est possible de manipuler des fonctions de la même manière que l'on manipule des instances de classes. Autrement dit, il est possible d'avoir des références vers des fonctions, et de passer des fonctions en paramètres d'une fonction.

Comme une image vaut mille mots, interrogeons-nous sur le code ci-dessous en nous posant les questions suivantes :

  • est-il correct, c'est-à-dire exécutable et ne donnant lieu à aucune erreur ?
  • qu'affiche-t-il ?
  • quel est l'état du programme une fois que les variables entier, fonc1 et fonc2 ont été définies ?
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/env python3
"""Un exemple de références vers des fonctions"""


def multiplie_par_deux(un_nombre):
    """Renvoie un_nombre multiplié par deux"""
    return un_nombre * 2


def ajoute_42(un_nombre):
    """Renvoie un_nombre + 42"""
    return un_nombre + 42


def applique_operation(un_nombre, operation):
    return operation(un_nombre)


def main():
    """Test de nos fonctions"""
    entier = 17
    fonc1 = multiplie_par_deux
    fonc2 = ajoute_42
    print(multiplie_par_deux(entier))
    print(fonc1(entier))
    print(applique_operation(entier, multiplie_par_deux))
    print(applique_operation(entier, fonc2))
    print(applique_operation(entier, fonc1(entier)))


if __name__ == "__main__":
    main()