10: def

Dans cette leçon nous allons vous montrer les idées les plus importantes en programmation: définir vos propres fonctions ! Les fonctions permettent à votre programme d'être plus court, mieux organisé, plus facile à lire, plus facile à déverminer et plus réutilisable. Dans les leçons à suivre nous allons voir d'autres avantages tels que la récursivité.

Définir une Fonction

Nous allons commencer avec un exemple. Vous rappelez-vous de la fonction abs ? Elle prend seulement un argument (un nombre x), et retourne sa valeur absolue (qui devient x quand x ≥ 0 et -x quand x < 0). La façon de définir cette fonction dans Python est :

def abs(x):     # définit une fonction appelée 'abs' avec un argument appelé 'x'
  if x >= 0:    # le corps de la fonction commence ici
    return x
  else:
    return -x   # le corps de la fonction se termine ici
(Cliquez ici pour voir ce code dans la console.)

Les Deux Parties de la Définition d'une Fonction

La première ligne dans une définition de fonction spécifie le nom de la fonction et le(s) argument(s) de la fonction. Cela devrait ressembler à ceci :

def «nom-fonction»(«liste-argument»):

Dans l'exemple ci-dessus, abs était le nom de la fonction et la liste d'argument était x. C'est appelé la liste d'argument parce qu'il peut avoir plusieurs arguments, par exemple x, yz. Il est également possible de ne pas avoir d'argument, c.-à-d. une liste vide. Les arguments sont des entrée(s) aux fonctions.

Tout ce qu'il y a après la première ligne d'une définition d'une fonction devient le corps de la fonction. Le corps est un bloc de code indenté. Chaque fois que la fonction est appelée, le corps est exécuté avec les arguments/entrées. Finalement, quand nous atteignons cette ligne dans le corps de la fonction,

return «valeur»
la fonction termine son exécution  et retourne «valeur» comme sortie. Le retour de valeur est donc la sortie de la fonction. Comme l'exemple abs le montre, le corps peut contenir plusieurs déclarations de retour ; mais seulement celle qui sera exécutée en premier aura un effet, car la fonction arrête son exécution par la suite.

Exemple: Définir et Appeler une Fonction

Le programme qui suit contient la définition d'une fonction et certaines autres déclarations qui sont exécutées après que la fonction soit définie.

Exemple : Fonction carré

Nous pouvons voir que le nom de la fonction est carré, qu'il y a seulement un argument x et que le corps de la fonction consiste seulement en une ligne de retour x*x. Puis en dehors de la fonction, on a deux commandes, qui appellent la fonction un total de trois fois.

  1. Quand la première commande est exécuté, Python doit évaluer carré(10). Python compare la liste d'entrées (10) à la liste d'argument (x). Alors, il exécute le corps de la fonction return x*x tout en se rappelant que x est égal à 10. Ainsi x*x donne 100, qui est affiché.
  2. Quand la deuxième commande est exécutée, Python doit évaluer carré(carré(2)). La partie interne de carré(2) est évaluée en premier. Nous rendons temporairement x égale à 2, et on exécute le corps de la fonction, qui retourne 4. Puis l'expression extérieure est évaluée; comme carré(2) donne 4, nous appelons maintenant carré(4). Cela retourne 16, qui est affiché.

Comme d'habitude, vous voudrez peut-être voir à quoi cela ressemble dans Python3 Visualizer.

Quatre Erreurs les plus Courantes

Une erreur très courante que vous pouvez faire en définissant une fonction est d'oublier la déclaration de retour.

Exemple
Erreur 1: Oublier le return

Comme vous pouvez voir, s'il n'y a pas déclaration de return dans le corps, la fonction donne None par défaut. Alors, si vous échouez à un exercice, parce qu'une fonction retourne None, le problème est souvent que quelques entrées de fonction ne provoquent pas l'exécution d'une instruction return.

Vous pouvez intentionnellement omettre une déclaration de return. Cela a du sens seulement si votre fonction a un effet secondaire autre que la valeur return, par exemple afficher une sortie de fonction:
Exemple : Un effet secondaire et aucune instruction return

Une autre erreur très courante est d'oublier d'indenter le code, résultant en une erreur de type IndentationError.

Exemple
Erreur 2: Oublier d'indenter

Comme nous avons vu dans leçon 2, un appel avec trop ou trop peu d'arguments provoque une erreur.

Exemple
Erreur 3: appel avec trop d'arguments

Finalement, si vous faites une erreur dans le nom quand vous définissez ou vous appelez la fonction, vous obtiendrez une erreur qui indique que la fonction est indéfinie.

Exemple
Erreur 4: nom incorrect

Essayez Vous-Même

Exercice de code : Cubism
Définir une fonction cube(n), qui prend une seul nombre n comme entrée et donne comme sortie le cube n×n×n.
Entrez instructions de test comme print(mafonction("argument de test")) ci-dessous.

Deux ou Plusieurs Arguments

Les fonctions ci-dessus ne prenait qu'un un argument, mais une fonction peut être conçue pour prendre plusieurs arguments. Par exemple, vous avez appelé input() avec 0 arguments (et vous allez définir une fonction avec 0 arguments dans leçon 15A).

Voici un exemple sur la géométrie avec deux arguments. Supposez que nous ayons besoin d'une fonction pour calculer l'aire d'une triangle, compte tenu a longueur de sa base base et sa hauteur. La formule pour calculer cette aire est

aire = base × hauteur / 2

En Python, nous pouvons définir un fonction aireTriangle comme suit :

Exemple
Une fonction avec deux arguments

Comme vous pouvez le voir, le seul changement est que nous avons remplacé def «nom-fonction»(«argument1») avec def «nom-fonction»(«argument1», «argument2»).

Dans ce dernier exercice nous vous demandons d'écrire votre propre fonction avec deux arguments, pour calculer le périmètre d'une rectangle. (Le périmètre est la longueur total de tous les côtés.) Dans une rectangle avec une largeur et hauteur donnée, la périmètre est donné par la formule qui suit :

périmètre = largeur + hauteur + largeur + hauteur

Exercice de code : Rectangle
Définissez une fonction perimetreRectangle(largeur, hauteur), qui calcule le périmètre d'un rectangle.
Entrez instructions de test comme print(mafonction("argument de test")) ci-dessous.

Fonctions peuvent appeler des fonctions

Les fonctions sont les éléments constitutifs de grands programmes bien bâtis: vous pouvez faire la même tâche deux fois sans l'écrire deux fois et vous pouvez réutiliser les solutions aux tâches communes. Voici un exemple de construction fonction utilisée dans une autre fonction.

Exemple
Pouvez-vous deviner ce que fait ce programme avant de l'excécuter?
Souvenez-vous que la multiplication des chaînes avec des entiers à la leçon 4 signifiait que l'on répétait la chaîne un certain nombre de fois. Par exemple, "tar"*2 is "tartar".

Vous êtes maintenant prêt pour la prochaine leçon !