Python (1) : Les fonctions

Les fonctions comme on les connaît au lycée

On peut définir une fonction d’une variable. Considérons par exemple la fonction affine f suivante définie sur \mathbb{R} par:

f : x\longmapsto 2x+1

Pour la définir en Python taper dans l'éditeur:

def f(x):
 return 2 * x + 1

On peut maintenant l'utiliser (dans la console):

>>> f(0)
1
>>> f(5)
11

Vous avez remarqué qu’à la deuxième ligne, on n’a pas commencé à écrire au début de la ligne. On dit qu’on fait une indentation. Et cette indentation est indispensable pour que Python fasse son travail. En règle générale, le bloc d’instructions (une ou plusieurs lignes) qui dépend d’une ligne (devant elle se terminer par :) doit être indenté. C’est obligatoire et en plus cela a l’avantage de rendre le script plus lisible. La lettre x définie dans def(x) est appelée paramètre ou encore argument de la fonction f. Sinon, le mot clé return est une instruction permettant d'indiquer ce que retourne la fonction.


Définir une fonction est intéressant pour au moins deux raisons:

Les fonctions comme base de la programmation

Les fonctions vues en Mathématiques prennent souvent un nombre pour en calculer l’image. Mais en programmation, on rencontre aussi beaucoup de fonctions ayant plusieurs paramètres, voire aucun. De plus les paramètres en entrée d'une fonction peuvent être de type différents. De même les fonctions peuvent retourner une chaîne de caractères, un t-uple, etc voire même ne rien retourner du tout.

Prenons quelques exemples :

La fonction suivante permet de retourner la somme des deux valeurs passées en paramètres.

Au moment de l'appel somme(5,7), python affecte la valeur 5 à a et la valeur 7 à b.

>>> def somme(a,b):
...     return a+b
...
>>> somme(5,7)
12

La fonction suivante permet de retourner un t-uple de 2 valeurs. La première correspond à la somme des paramètres et la seconde à leur différence.

>>> def somdiff(a,b):
...     return (a+b,a-b)
...
>>> somdiff(5,7)
(12,-2)

La fonction suivante ne prend pas de paramètre mais va retourner une lettre au hasard.

>>> from random import choice
>>> def lettre():
...     return choice('abcdefghijklmnopqrstuvwxyz')
...
>>> lettre()
'm'
>>> lettre()
'r'

Enfin, la fonction suivante n’a pas de paramètre et ne retourne rien non plus (pas de return).

La fonction ne renvoie rien mais ne chôme pas pour autant, elle écrit quelque chose à l’écran.

>>> def hi():
...     print("Hello from Python!!!")
...
>>> hi()
Hello from Python!!!

Beaucoup de combinaisons sont possibles pour les fonctions, à vous de construire les bonnes suivant vos besoins.


Prototypage de fonctions - commentaires

Quelques points très importants lorsque vous écrivez une fonction :


Exemple :

#  fonction sommdiff
#  Calcule la somme et la différence des 2 valeurs passées en paramètre
#  a de type Nombre
#  b de type Nombre
#  Renvoie un tuple de Nombres (a+b, a-b)

def somdiff(a,b):
    return (a+b,a-b)

Prototypage de fonction (pré/post)

Le prototypage consistera pour nous à indiquer, sous forme de commentaires, les entrées de la fonction ainsi que la sortie. On pourra indiquer pour chaque entrée les conditions quelles doit vérifiées (pré condition) et pour les sorties toutes indications utiles (post condition).

Montrons sur un des exemples précédents comment mettre en place notre prototypage :

# Fonction somme
# Entrées : a et b de type nombre
# Sortie : le nombre (a+b)
def somme(a,b):
        return a+b

CCBYNCSA"(source python.lycee.fr)

Auteurs : Kamel Naroun et M. Gragnic -2011 (Modifié C. Béasse - Février 2019)