Introduction aux fonctions

Une fonction est une structure qui permet de grouper des instructions sous un nom (le nom de la fonction) et de les exécuter par appel de cette fonction.

Les fonctions sont définies par l'instruction def et sont appelées par leur nom suivi de parenthèses. Les parenthèses déclarent les paramètres attendus.


In [ ]:
def print_something():
    print("Something")
    
print_something()

print_something n'attends pas de paramètre. Vous pouvez l'appeler dans la cellule suivante (après avoir exécuté la cellule précédente afin que la fonction soit connue dans le notebook actuel).


In [ ]:

Les fonctions peuvent avoir des paramètres. Vous pouvez tester la fonction suivante en lui passant un paramètre.


In [ ]:
def print_param(param_to_print):
    print("exécuté avec", param_to_print)

In [ ]:

Exercice

Dans le notebook précédent, nous avons un code qui calcul la durée en heure d'une formation. Écrivez une fonction qui affiche cette durée en prenant un paramètre number_of_days.


In [1]:
def training_duration(number_of_days):
    print(number_of_days * 7)

Éxécutez cette fonction avec différents paramètres


In [2]:
training_duration(2)
training_duration(5)


14
35

Avez vous essayé d'appeler cette fonction avec le paramètre "2" ? Que se passe-t-il ?


In [3]:
training_duration('2')


2222222

Si le comportement est incohérent, corrigez la fonction pour qu'il ne le soit plus.


In [4]:
def training_duration(number_of_days):
    print(int(number_of_days) * 7)

In [5]:
training_duration('2')


14

Une bonne fonction ne fait qu'une seule chose (et la fait bien). Notre fonction en fait 2 : elle calcule une valeur et l'affiche. Ceci est une mauvaise pratique car :

  • si nous exécutons la fonction dans un environnement sans terminal, nous ne pouvons pas voir la valeur
  • si nous souhaitons obtenir cette valeur pour en faire quelque chose… et bien nous ne pouvons pas.

Il est donc préférable qu'une fonction qui calcule une valeur retourne cette valeur. Redefinissez la fonction ci-dessous pour qu'elle retourne cette durée.


In [6]:
def training_duration(number_of_days):
    return int(number_of_days) * 7

Et écrivez l'instruction ci-dessous qui affiche la durée en heure d'une formation de 2 jours à l'aide de cette fonction.


In [7]:
print(training_duration(2))


14

Généralisation

La fonction précédente a été écrite dans le contexte fonctionnel de la formation. Mais nous pouvons la généraliser pour calculer une durée unitaire totale. Écrivons donc une fonction duration_for qui prendra en paramètre une quantité. Nous pouvons ajouter un paramètre pour la durée unitaire qui aura une valeur par défaut.

Écrivez donc cette fonction duration_for(how_many: int, unit_duration=7) que nous allons pouvoir réutiliser.


In [1]:
def duration_for(how_many: int , unit_duration=7):
    return int(how_many) * int(unit_duration)

Vous pouvez évidemment observer que cette fonction se comporte de la même manière ci-dessous.


In [2]:
print(duration_for(2))


14