Fonctions


Lorsquun programme atteint une taille critique (de lordre de quelques dizaines de lignes maximum), il devient rapidement impératif dorganiser au mieux les lignes de code, tout comme on organise ses idées dans des parties séparées et des paragraphes pour une dissertation par exemple.

En informatique, un des moyens pour atteindre cet objectif est dutiliser la notion de fonction.

Quest-ce quune fonction ?

Une fonction en python peut rappeler par certains aspects la notion de fonction en mathématique: on peut voir une fonction comme une sorte de boîte noire prenant une ou plusieurs valeurs en entrée, et renvoyant une valeur en sortie.

Le langage python est livré avec des milliers de fonctions déjà écrites, que lon trouvera dans la librairie standard.

Par exemple, il existe une librairie dédiée au mathématiques, comportant notamment la plupart des fonctions (au sens mathématique) utilisées au lycée. Essayez les commandes suivantes dans le shell python:

>>> from math import sqrt, cos, sin, pi
>>> sqrt(9)
3.0
>>> cos(1.5)
0.0707372016677029
>>> sin(3*pi/4)
0.7071067811865476

Ici, sqrt, cos et sin sont trois fonctions (au sens de python) qui se comportent exactement comme les fonctions équivalentes en mathématiques (sqrt vient de langlais square root qui se traduit littéralement en racine carrée).

Mais le langage python dispose aussi de fonctions dont la vocation nest pas de renvoyer une valeur, mais plutôt de produire un effet: affichage dans la console, émission dun son, lancement dune vidéo, accès au réseau, écriture sur un disque, etc\(\dots\).

La fonction print en est un exemple : elle accepte un nombre indéterminé de paramètres, et les affiche dans la console en les séparant par des espaces:

print("La racine carrée de 42 est", sqrt(42), ".")
La racine carrée de 42 est 6.48074069840786 .

Il ny a pas déquivalent en mathématique de la fonction print: on constate quen python la notion de fonction est bien plus large que celle des mathématiques. On parle parfois de sous-programme pour désigner une fonction dont le but nest pas le calcul dune valeur mais la production dun effet.

Comment définir une fonction en python ?

Commençons par définir une fonction python qui sappellera f, et dont le comportement sera calculé sur la fonction mathématique \[f: x\longmapsto (x+1)^2\\]

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

f(3)

Ce petit script affiche le résultat escompté:

16

Le mot clé def annonce la définition dune fonction. Il est toujours suivi du nom de cette fonction, puis de la liste des paramètres entre parenthèses, et enfin dun double point.

Le corps de la fonction est une suite plus ou moins longue dinstructions python, qui devront toujours être indentées par rapport à la marge de gauche. Cest par ce mécanisme que le linterpréteur du langage python saura quelles sont les lignes qui font partie de la fonction, et celles qui nen font plus partie.

Linstruction spéciale return signifie deux choses: elle interrompt dune part lexécution de la fonction (même sil reste dautres instructions derrière) et dautre part elle précise quelle sera la valeur de retour de la fonction.

La dernière ligne nétant pas indentée, elle ne fait pas partie de la définition de la fonction. Bien au contraire, elle sert à appeler la fonction en associant au paramètre × la valeur 3. Comme on le constate, la valeur de retour est bien le nombre attendu, puisque \((3 + 1)^2 = 4^2 = 16\).

En python, on utilisera plutôt des noms de fonctions (mais aussi de paramètres, de variables) décrivant précisément leur usage, à linverse des mathématiques où on privilégie les variables et les fonctions à une lettre.

Voici un exemple beaucoup plus pythonesque:

def périmètre_rectangle(longeur, largeur):
    périmètre = (longeur + largeur) * 2
    return périmètre

périmètre_rectangle(5, 12)
34

Fonction produisant un effet de bord

Voici un exemple dune fonction qui ne renvoie aucune valeur: son but est simplement dafficher un ou plusieurs messages dans la console: on dit que la fonction produit un effet de bord:

def salutation(prénom):
    print("Bonjour", prénom, "!")
    print("Comment allez-vous ?")

salutation("Pascal")

Comme on peut le constater, bien que la fonction ne renvoie aucune valeur (a priori), son appel produit un affichage dans la console:

Bonjour Pascal !
Comment allez-vous ?

Une fonction peut très bien appeler une autre fonction: python ne perdra jamais le fil de lexécution, et saura retrouver à chaque fois la ligne de code à partir de laquelle la fonction a été appelée.

Un programme complet est en général constitué de dizaines (voire de milliers) de fonctions qui sappellent mutuellement. Nous reparlerons plus tard des aspects pratiques de lorganisation du code dun programme complet.

Voici un exemple à peine plus complexe:

def appliquer_tva(prix_hors_taxe, taux):
    tva = prix_hors_taxe * taux / 100
    return prix_hors_taxe + tva

def imprime_étiquette(objet, prix_hors_taxe):
    prix_ttc = appliquer_tva(prix_hors_taxe, 19.6)
    print(objet, "- prix TTC: ", prix_ttc, "€")

imprime_étiquette("Lecteur MP3", 45)

Les appels imbriqués aux deux fonctions sont totalement invisibles pour lutilisateur. Seul le résultat est affiché dans la console:

Lecteur MP3 - prix TTC:  53.82 €