Les fonctions en Python

(actualisé le )

Objectifs :
- Introduire la notion de fonctions en programmation
- Savoir définir une fonction en Python
- Comprendre l’intérêt de définir des fonctions
- Ajouter de nouvelles instructions au langage de programmation sous la forme de fonctions originales

Il arrive très souvent en programmation qu’une instruction un peu complexe reviennent régulièrement, qu’un traitement de données nécessite plusieurs fois le même algorithme… les fonctions sont là pour nous aider dans ces tâches !

Ada Lovelace a été la première à formaliser le principe de programmation en expliquant comment réaliser un calcul mathématique complexe en le fractionnant.

Les principes
Les fonctions permettent de décomposer un programme complexe en une série de sous-programmes plus simples. De plus, les fonctions sont réutilisables : si nous disposons d’une fonction capable de calculer une racine carrée, par exemple, nous pouvons l’utiliser un peu partout dans notre programme sans avoir à la réécrire à chaque fois (on parle de factorisation du code)
Une fonction est définie par un nom, par ses arguments qui porteront les valeurs communiquées par le programme principal à la fonction au moment de son appel et éventuellement d’une valeur de retour communiquée au programme par la fonction en fin d’exécution
La notion de fonction en informatique est comparable à la notion de fonction en mathématiques.

Si nous avons la fonction y = f(x) = 1,5.x + 6, pour une valeur donnée de x, nous aurons une valeur de y.
Exemple : x = 12 => y = f(12) = 24

La fonction en informatique est basée sur la même idée :

Intérêts des fonctions :
- Evite la duplication du code (factorisation du code)
- Améliore la conception : décompose un problème initial complexe en sous problèmes plus simples
- Met en relief les entrées et les sorties
- Permet la réutilisation ultérieur (avec l’instruction import)

En Python
Syntaxe employée en Python pour définir une fonction :

  1. def nom_de_la_fonction(parametres):
  2.         instruction_1
  3.         instruction_2
  4.         return y
  5.  
  6. #suite du programme
  7.        

Télécharger

La fonction renvoie la valeur contenue dans la variable y.

Attention  :
- Bien noter la présence du décalage entre la première ligne et les lignes suivantes. Ce décalage est appelé indentation, l’indentation permet de définir un bloc de code. Dans l’exemple ci-dessus, l’indentation nous permet de savoir que "instruction_1", "instruction_2" et "return y" constituent un bloc de code, ce bloc correspond au contenu de la fonction. "suite programme" ne fait pas partie de la fonction, car il n’est pas indenté. Pour indenter du code, il y a 2 solutions : mettre 4 espaces ou utiliser une tabulation. Ne pas changer de méthode au cours d’un même programme !
- Une fonction doit être déclarée avant d’être appelée par le programme principal (ou par une autre fonction)

Codons l’exemple f(x) = 1,5.x + 6 en créant une fonction ma_fonction :

  1. def ma_fonction(x):
  2.         y = 1,5 * x + 6
  3.         return y

Télécharger

Pour "utiliser" la fonction ma_fonction, il suffit d’écrire : ma_fonction (12) (dans ce cas précis, la fonction renverra le nombre 24).

Les fonctions récursives
Les fonctions peuvent s’appeler elles-mêmes, on parle alors de fonctions récursives.
Attention : dans le cas de fonctions récursives, il est impératif de prévoir un cas de base dans lequel la fonction ne s’appelle pas elle-même afin qu’elle ne s’appelle pas indéfiniment et que le programme boucle à l’infinie.
Exemple  : fonction permettant de calculer la puissance n de 2.

  1. def puissance2(n):
  2.         if n == 0:
  3.                 return 1 # cas de base
  4.         else :
  5.                 return (2 * puissance2 (n – 1)) # le résultat est 2 * 2n - 1

Télécharger