Fonctions

Connaissez-vous le langage appelé Assembleur ? Prenez quelques secondes pour le regarder sur wikipedia et essayez de déchiffrer ce que fait le programme dans l'image en haut à droite... Ce n'est pas le langage dans lequel vous voulez programmer tous les jours ! Prenez le temps de réfléchir à la chance que vous avez de ne pas avoir à en passer par là et d'utiliser plutôt python.

Cette chance, vous l'avez en partie grâce aux fonctions. Comme en mathématiques, les fonctions peuvent prendre des arguments et retourner une valeur. Vous devriez tous avoir déjà utilisé la fonction cosinus. Le cosinus prend un paramètre, un angle, et renvoie une valeur comprise entre -1 et 1. En informatique, les fonctions se présentent sous de nombreuses formes. Elles peuvent prendre un ou plusieurs arguments ou aucun. Elles peuvent retourner des valeurs, mais elles ne sont pas obligées de le faire (dans ce cas, on pourrait appeler cela une procédure).

Un tel outil permet de rendre notre code lisible, moins répétitif, et de combiner et construire des fonctions les unes avec et sur les autres. C'est ainsi que, grâce à certains programmeurs, votre ordinateur peut comprendre un langage de haut niveau comme python, alors qu'à la base il ne peut comprendre que l'assemblage. Voyons comment utiliser cet outil incroyable sur python.

Voici quelques exemples de déclarations de fonction (définition) et leur utilisation

# printHelloWorld: 
# pas d'arguments, 
# affiche "Hello world"
# ne retourne rien
def printHelloWorld():
  print("Hello world")

# div: arguments = 2 integers; retourne 1 nombre décimal
def div(a,b):
  return a/b

# splitStringAtComma: argument = 1 string; retourne une liste de chaine de caractères
def splitStringAtComma(s):
  return s.split(",")

# fibonacci: argument = 1 entier; retourne 1 entier
def fibonacci(n):
  x_nm2 = 0 # x_{n-1}
  x_nm1 = 1 # x_{n-2}
  for i in range(n):
    x_n = x_nm1 + x_nm2 # x_n
    x_nm2 = x_nm1
    x_nm1 = x_n
  return x_nm1

# ceci n'étaient que les définitions des fonctions. 
# Maintenant qu'elles sont définies, nous pouvons les utiliser comme telles :
printHelloWorld()
f = div(1,4)
l = splitStringAtComma("str1,str2")
r = fibonacci(10)

print(f)
print(l)
print(r)

Remarquez comme la fonction est d'abord définie, puis utilisée... ou pas. On aurait très bien pu ne pas appeler la fonction printHelloWorld(). Considérons par exemple le programme suivant:

FonctionFlow

À son exécution l'instruction 1 sera appelée, puis l'instruction 2 et 3 ne seront appelée qu'à l'appel de ma_fonction.

Exercice 4

  • Prédire ce qui se passera si l'appel à la fonction printHelloWorld() est enlevé. Testez le avec l'ordinateur.
  • Définir une fonction avec un paramètre n qui calcule et retourne le nombre d'or en utilisant les nième et n+1ième nombres de fibonacci.