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'