Programmer en Python en 2nde

Fonctions : définition

Crédits

Toute la structure html/css/js et une partie du contenu ont été réalisés par Nicolas Buyle-Bodin professeur au lycée Lacassagne, avec l'aide de Jean-Manuel Mény, professeur au lycée de la plaine de l'Ain. Ils ont travaillé pendant plusieurs centaines d'heures pour créer un site de formation à destination des enseignants du secondaire de l'académie de Lyon d'une grande qualité visible sur le portail Mathématiques du site académique. Ils ont eu la gentillesse de placer leur code source sous licence Creative Commons BY-NC-SA Respect de la Paternité - Pas d'utilisation commerciale - Partage des conditions initiales à l'identique..

Nous les en remercions chaleureusement.

Définition d'une fonction avec def

Lorsqu'on a besoin d'utiliser plusieurs fois un même bloc d'instructions, on peut l'encapsuler dans une fonction. On peut ainsi étendre le langage avec une nouvelle instruction.

Dans la définition d'une fonction, on précise son nom et en général des paramètres formels d'entrée et une valeur de retour. En Python on définit une fonction ainsi :


def mafonction(parametre1, parametre2):
    #bloc d'instructions (optionnel)
    return valeur   

Par exemple une fonction carre qui prend en paramètre un nombre x et qui retourne son carré, s'écrira :


def carre(x):
    return x ** 2

Une fonction peut prendre plusieurs paramètres. Par exemple une fonction carre_distance_origine qui prend en paramètres deux nombres x et y et qui retourne le carre de la distance d'un point de coordonnées (x, y) à l'origine d'un repère orthonormal, s'écrira :


def carre_distance_origine(x, y):
    return x ** 2 + y ** 2

Une fonction peut retourner un tuple de valeurs. Par exemple une fonction coord_vecteur qui prend en paramètres quatre nombres xA, yA, xB et yB et qui retourne les coordonnées du vecteur lié dont les extrémités ont pour coordonnées (xA, yA) et (xB, yB), s'écrira :


def coord_vecteur(xA, yA, xB, yB):
    return (xB - xA, yB - yA)

Nous venons de voir la définition d'une fonction. On exécute la fonction en substituant aux paramètres formels des valeurs particulières appelées arguments. Cette instruction se nomme un appel de fonction :

  • Un exemple d'appel de la fonction carre(x) définie ci-dessus :
    
    res = carre(3)
    print(res)
    
    9   
  • Un exemple d'appel de la fonction carre_distance_origine(x, y) définie ci-dessus :
    
    dist = carre_distance_origine(-3, 4)
    print(dist)
    
    25    
  • Un exemple d'appel de la fonction coord_vecteur(xA, yA, xB, yB) définie ci-dessus :
    
    (a, b) = coord_vecteur(1, -3, 4, 6)
    print(a, b)
    
    (3, 9)    
    Notez dans ce cas, l'importance de bien respecter l'ordre des paramètres arguments lorsqu'on les remplace par des arguments.

Il existe aussi des fonctions sans paramètres d'entrée ou sans valeur de retour. Par exemple, une fonction qui affiche le nom complet d'un acronyme peut s'écrire :


def icn():
    print("Informatique et Création Numérique") 

Attention, return valeur retourne valeur qu'on peut capturer dans une variable alors que print(valeur) affiche valeur sur la sortie standard (l'écran par défaut) mais valeur ne peut alors être capturée dans une variable.

On donne ci-dessous un extrait de console Python, où on a défini maladroitement une fonction cube avec un print à la place d'un return. On ne récupère pas la valeur de retour souhaitée mais None lorsqu'on appelle la fonction.


In [10]: def cube(x):
    ...:     print(x ** 3)
    ...:     

In [11]: cube(4)
64

In [12]: b = cube(5)
125

In [13]: b

In [14]: print(type(b))
<class 'NoneType'>

In [15]: print(b + 1)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
----> 1 print(b + 1)

TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'