Pour constuire un projet conséquent, il y a souvent beaucoup de petites tâches à assembler et à créer. En programmation, chacune de ces tâches élémentaires (comme des microprogrammes) sont écrites dans des fonctions.
Une fonction est introduite avec le mot clef def
suivie du nom de la fonction, puis entre parenthèses les paramètres d'entrée de la fonction.
Voyons un exemple assez simple pour commencer : on désire créer une fonction qui renvoie la somme de deux nombres. Observez la construction de cette fonction dans la cellule suivante :
# notre 1ère fonction :
def somme(a, b):
resultat = a + b
return resultat
Lors de l'exécution de la cellule précédente, rien ne se passe (rien de visible en tout cas). On vient juste de définir "une boite noire" capable de calculer la somme de 2 nombres a et b et de renvoyer le résultat de cette opération.
Pour que cette fonction deviennet opérante concrètement, il faut l'appeler (on dit aussi l'invoquer) avec des valeurs pour ses paramètres d'entrée a et b. Voyez comment ci-dessous :
# appel de la fonction somme définie précédemment :
somme(5, 7)
Lors de l'appel de la fonction, son paramètre a
prend la valeur 5 et son paramètre b
la valeur 7. Ensuite dans le corps de la fonction, la somme des contenus des variables a
et b
est affectée à la variable resultat
et cette variable est renvoyée par la fonction, avec le mot clef return.
On peut bien entendu affecter à une autre variable la valeur renoyée par une fonction.
Observez :
calcul = somme(12, -5)
print("La somme de 12 et -5 vaut :", calcul)
Avez-vous remarqué les deux points (:) à la fin de la ligne de signature de la fonction, après les parenthèses ? Ils sont obligatoires ! C'est le langage Python qui les impose.
Ensuite, le reste du code défini dans la fonction est décalé par rapport à la marge. Cela s'appelle une indentation (4 espaces ou une tabulation).
Le rôle de l'indentation n'est pas seulement de "faire joli", même si ça aide bien la lecture du code (c'est d'ailleurs quand même un de ses buts). Le rôle premier de l'indentation est de délimiter un bloc de code, une suite d'instructions qu'il faut exécuter ensembles.
Remarque : on trouvera des blocs de code indentés à chaque fois que l'on croise deux points (:) en Python.
Finalement, on l'a déjà évoqué, la fonction renvoie une sortie, avec le mot clef return : le résultat de son action.
Remarque : certaines fonctions peuvent effectuer une tache sans renvoyer de résultat particulier.
# voici un autre exemple de définition de fonction : essayez de deviner son action...
def f(x):
x = 5 * x
return x
# notez bien qu'on arrête l'indentation (donc on quitte la fonction), et on écrit de nouveau au bord de la marge :
nombre = 8 # affection de la valeur 8 à la variable nombre
a = f(nombre) # appel de la fonction f avec le contenu de la variable nombre comme valeur du paramètre d'entrée x
print(a) # affichage du résultat
print(nombre) # remarquez que la variable nombre n'a pas changé
augmente
qui prend un nombre comme paramètre d'entrée et qui renvoie ce nombre augmenté de 3.¶Faire un appel à cette fonction pour contrôler son bon fonctionnement.
# à vous de jouer ci-dessous :
def augmente(n):
res = n + 3
return res
augmente_n
qui prend deux paramètres d'entrée :¶Faire un appel à cette fonction pour contrôler son bon fonctionnement.
# à vous de jouer
def augmente_n(x, n):
res = x + n
return res
augmente_n(10, 7)
Choisissez des noms pertinents pour les paramètres d'entrée.
Rappel : v = d / t
Et bien entendu, testez l'appel de votre fonction pour vérifier si elle semble bien faire son travail.
# à vous de jouer
def vitesse(distance, temps):
return distance / temps
d, t = 10, 2
vitesse(d, t)
Indice : pensez quels sont les paramètres d'entrée.
Et n'oubliez d'appeler la fonction pour la tester.
# à vous de jouer
def surface_rectangle(L, l):
return L * l
surface_rectangle(5, 3)
age
qui calcule l'âge d'une personne.¶Quel sont les paramètres d'entrée ? (ne cherchez pas à fignoler avec le mois et le jour de naissance...)
Et n'oubliez d'appeler la fonction pour la tester.
# à vous de jouer
def age(annee_naissance, annee_en_cours):
return annee_en_cours - annee_naissance
age(2004, 2020)
accueil
qui affiche un message de bienvenue¶Elle prend en paramètre le nom d'une personne (c'est une chaine de caractères) et elle écrit :
"Bienvenue à toi, <nom de la personne> !"
Cette fonction ne renvoie rien.
Et n'oubliez d'appeler la fonction pour la tester.
# à vous de jouer
def accueil(nom):
print("Bienvenue à toi,", nom)
accueil("Antoine")
Une fonction peut bien entendu appeler une autre fonction.
L'exemple suivant s'appuie sur les 2 fonctions que vous venez de créer.
def accueil_age_2050(nom, naissance):
"""
Cette fonction écrit un message d'accueil,
et annonce votre âge en 2050 !
"""
annee = 2050 # définition d'une variable dans le corps de la fonction
accueil(nom) # appel à la fonction accueil pour écrire un début de message
futur_age = age(naissance, annee) # calcul de l'âge en 2050
print("En", annee, ", tu auras :", futur_age,"ans.") # affichage prophétique
accueil_age_2050('Tony', 2004)
Une fonction peut aussi servir effectuer une tâche qui ne dépend d'aucun paramètre d'entrée.
On pourrait par exemple imaginer une fonction qui crée un nombre alétaoire entre 1 et 10 (idée bizarre, OK...).
Ne cherchez pas à comprendre toutes les lignes de la cellule suivante (volontairement compliquée) : le but est juste de faire des appels répétés à la fonction hasard
et de vérifier qu'elle fait bien le travail souhaité.
# dans cette cellule, on crée la fonction souhaitée
from random import choice
def hasard():
liste = [i for i in range(1, 11)]
nombre = choice(liste)
return nombre
# exécutez plusieurs fois de suite cette cellule pour tester notre fonction.
hasard()
Le point à noter est qu'il ne faut pas oublier les parenthèses, même si la fonction ne prend aucun paramètre d'entrée.
Vous avez remarqué que chaque ligne de code qui commence par un dièse # n'est pas interprétée par Python. On appelle cela un commentaire, cela permet d'éclairer son code pour qu'il soit lu aisément : ça facilite la compréhension !
Cliquer dans le menu File -> Close and Halt (en Français : Fichier -> Fermer et Arrêter), puis ouvrir le fichier Python-initiation-3.ipynb.