Fonctions¶
Souvent, en programmation, on a besoin de faire la même chose plusieurs fois, ou de résoudre des problèmes semblables par une même suite d’instructions.
Concept de fonction¶
La quasi-totalité des langages de programmation disposent d’un concept de sous-programme, qui nous permet de prendre une suite d’instructions, de lui donner un nom, et d’ensuite les exécuter autant de fois que nécessaire simplement en utilisant le nom de ce sous-programme. En Python, un tel sous-programme s’appelle une fonction.
Les fonctions sont flexibles et peuvent être paramétrées, c’est-à-dire qu’elle vont demander des valeurs supplémentaires lors de leur exécution, valeurs qu’on appelle arguments. Finalement, elle peuvent aussi calculer et retourner une valeur qui sera utilisable depuis le code qui a appelé la fonction.
On peut considérer que les fonctions fournissent ainsi la possibilité d’enrichir le vocabulaire avec lequel on donne des instructions à la machine. Voici un exemple:
Exercice: Ajoutez un deuxième appel de fonction pour Ada
.
Cet exemple illustre à la fois
la définition d’une nouvelle fonction avec
def saluer(nom)
etson appel, donc son utilisation avec
saluer('Marc')
.
Une fonction doit être définie avant sa première utilisation. Ici, elle s’appelle saluer
et exécute deux instructions print
. Elle possède un argument qui est nommé nom.
Cet argument est utilisé au sein de la fonction, et prendra la valeur qu’on lui assignera lors de l’appel de la fonction.
L’argument de la fonction est une variable local, qui est visible et utilisable uniquement à l’intérieur du bloc de la fonction.
Appeler une fonction¶
Une fois une fonction définie, il est possible de l’utiliser en l’appelant. Pour ce faire, il suffit d’écrire le nom de la fonction suivi des éventuels arguments de la fonction entre parenthèses.
Voici quelques exemples d’utilisation de fonctions prédéfinies en Python.
La fonction print
affiche ses arguments dans la console.
Elle est très polyvalent au niveau du nombre des arguments:
avec 1 argument : affiche une chaine de texte
avec 0 arguments : affiche une ligne vide
avec 2 arguments : affiche chaque résultat séparé par une espace
Exercice: Ajoutez une instruction print
avec 3 arguments de type différent.
La fonction print
possède aussi un paramètre optionnel, qui indique quel caractère à utiliser comme séparateur entre plusieurs arguments à afficher.
le séparateur par défaut et l’espace
' '
l’exemple 2 utilise la chaine vide comme séparateur, les arguments sont collées ensemble
l’exemple 3 utilise la chaine
'---'
comme séparateur
Exercice: Ajoutez une fonction print
avec 4 arguments et un séparateur non-standard.
Fonctions natives¶
Voici quelques fonctions natives, c’est à dire des fonctions standards qui font partie de Python:
la fonction
pow
retourne la puissance de ses deux arguments (ici, par exemple, \(3^5\))la fonction
len
retourne la longueur d’une chaine de caractères ou d’une listela fonction
round
retourne l’arrondi d’une valeur numérique
Exercice: Aujoute une ligne avec la fonction min
qui retourne la valeur minimale des arguments qu’on lui fournit.
Définir une fonction¶
Pour définir une fonction, il faut écrire sur la première ligne:
le mot-clé
def
le nom de la fonction
suivi par une paire de parenthèses
()
contenant une liste de 0 ou plusieurs arguments, séparé par une virgule
,
terminé par un deux-points
:
On appelle cette première ligne signature de la fonction:
def ma_fonction(arg1, arg2):
Le nom d’une fonction suit les mêmes règles que pour les noms de variables:
des lettres,
des chiffres (sauf pour le premier caractère)
le tiret bas
_
les mots-cés (
if
,else
) sont exclus
La première ligne de définition de la fonction (signature) est suivi d’un bloc d’instructions qui doit être indenté. Ce sont les instructions qui seront exécutés à chaque appel de la fonction. Lors de la définition, ces instructions ne sont pas encore exécuté.
Donc, si une fonction est définie mais jamais appelé, ces lignes de code ne seront jamais exécutés.
Valeur de retour¶
L’instruction return
permet de retourner une valeur calculée par la fonction et d’ainsi déterminer quelle est son résultat — ce qu’on appelle sa valeur de retour.
Toutes les fonctions ne doivent pas forcément retourner une valeur. Comme le premier exemple le montre, une fonction pourrait se contenter de faire quelques print
sans calculer un résultat donné. Dans ce cas, lorsqu’il n’y a pas de valeur à retourner, on n’a pas besoin du mot clé return
.
L’exemple suivant définit une fonction pour calculer la vitesse à partir de la distance parcourue et le temps utilisé.
Il est possible d’utiliser plusieurs arguments dans une fonction en les séparant par une virgule. L’ordre des arguments doit être respecté; ainsi, vitesse(12, 3)
ne retournera pas la même valeur que vitesse(3, 12)
: l’un calcule la vitesse nécessaire pour parcourir 12 kilomètres en 3 heures, alors que l’autre calcule la vitesse nécessaire pour parcourir 3 kilomètres en 12 heures.
Exercice: Calculez la vitesse d’une voiture qui fait la distance Lausanne-Genève (65 km) en 45 minutes.
Exercices¶
Exercice 1 - Pythagore¶
Définissez une fonction pythagore
qui calcule l’hypotenuse d’un triangle rectanlge à partir de ses deux cotés.
La racine carrée peut s’obtenir avec la puissance 0.5.
Exercice 2 - eq. quadratique¶
Faites un programme qui demande à l’utilisateur les coefficients a, b et c d’une fonction du deuxième degré et qui retourne les solutions de l’équation \(ax^2 + bx + d = 0\).
Afin de pouvoir réutiliser ce calcul dans plusieurs programmes, nous allons créer une fonction solutions_eq2
acceptant 3 arguments (a, b et c).
Rappel:.
Si le discriminant \(\Delta = b^2 - 4ac\) est
négatif: il n’y a pas de solution,
nul: il y a qu’une seule solution,
positif: il y a deux solutions.
Calculez par exemple les solutions de
\(x^2 + 2x + 3 = 0\)
\(2x^2 - x + 2 = 0\)
ou d’une autre équation quadratique