Cours Python · Module 1: Bases de Python
Les fonctions - les outils d'exploration
Dans cette leçon7
Bienvenue ! Après chaque étape du parcours, tu calcules la vitesse moyenne de marche. À la troisième copie de la même formule, tu fais une faute de frappe. Un bon explorateur ne réalise pas chaque tâche à partir de zéro. Il a des outils tout prêts : un coup de machette, un geste pour monter la tente. En programmation, un tel outil réutilisable s'appelle une fonction. Une fonction est un bloc de code nommé que l'on peut exécuter quand on le souhaite.
Définir une fonction - le mot-clé def
On crée une fonction avec le mot-clé def (de « define »). On donne un nom à la fonction, des parenthèses et un deux-points, puis en dessous - un bloc de code indenté. L'indentation, en général quatre espaces, indique à Python quelles lignes appartiennent à la fonction :
1def greet_explorer():
2 print("Bienvenue au Safari !")
3 print("Darwin te souhaite une excellente expédition.")
4
5# Appeler la fonction - on l'exécute par son nom
6greet_explorer()Définir une fonction ne l'exécute pas - c'est comme écrire le mode d'emploi d'un outil. Pour utiliser l'outil, il faut l'appeler en écrivant son nom suivi de parenthèses : greet_explorer(). On peut l'appeler autant de fois qu'on veut ! Le nom seul, sans parenthèses, ne fait rien - c'est juste un outil accroché au mur.
Les paramètres - transmettre des données à une fonction
Un outil devient plus puissant quand on peut lui transmettre quelque chose. Les paramètres sont des données qu'une fonction accepte entre parenthèses. Dans la définition, name est une place réservée pour une valeur, et à l'appel on donne un argument concret :
1def greet_explorer(name):
2 print(f"Bienvenue, {name}, au Safari !")
3
4greet_explorer("Darwin") # Bienvenue, Darwin, au Safari !
5greet_explorer("Anna") # Bienvenue, Anna, au Safari !La même fonction a affiché deux salutations différentes, car à chaque appel name reçoit une nouvelle valeur. Un paramètre ne vit qu'à l'intérieur de la fonction - en dehors, le nom name n'existe pas.
Une fonction peut accepter plusieurs paramètres. On les sépare par des virgules, et les arguments prennent leur place dans l'ordre :
1def describe_animal(species, weight):
2 print(f"{species} pèse {weight} kg.")
3
4describe_animal("Éléphant", 5000) # Éléphant pèse 5000 kg.
5describe_animal("Lion", 190) # Lion pèse 190 kg.L'ordre compte : describe_animal(5000, "Éléphant") affiche « 5000 pèse Éléphant kg. » - Python ne devinera pas ce que tu voulais dire.
Renvoyer une valeur - le mot-clé return
Jusqu'ici, nos fonctions se contentaient d'afficher du texte. Mais souvent, on veut qu'une fonction calcule quelque chose et nous renvoie le résultat. C'est à ça que sert le mot-clé return :
1def calculate_speed(distance, time):
2 speed = distance / time
3 return speed
4
5# On peut sauvegarder le résultat dans une variable
6result = calculate_speed(30, 4)
7print(f"Vitesse : {result} km/h") # Vitesse : 7.5 km/h
8
9# Ou l'utiliser directement
10print(f"Vitesse : {calculate_speed(60, 3)} km/h") # Vitesse : 20.0 km/hLa différence est importante : print() se contente d'afficher du texte à l'écran, tandis que return renvoie une valeur que l'on peut réutiliser dans d'autres calculs. Une fois que return s'exécute, la fonction se termine immédiatement.
Que se passe-t-il sans return ?
L'erreur la plus fréquente des pisteurs débutants : la fonction affiche le résultat au lieu de le renvoyer. L'écran a l'air correct, mais rien n'arrive dans la variable :
1def show_speed(distance, time):
2 print(distance / time)
3
4result = show_speed(30, 4) # affiche 7.5
5print(result) # NoneUne fonction sans return renvoie None, la « pas de valeur » de la leçon sur les types. Le nombre 7.5 est apparu à l'écran, mais result ne le contient pas. Mon conseil : fais renvoyer le résultat aux fonctions de calcul, et laisse l'affichage au code qui les appelle.
Les fonctions avec conditions - combiner ses connaissances
Les fonctions peuvent contenir tout ce que tu as appris - conditions, boucles, opérateurs. Cette fonction décide si un animal est trop lourd pour qu'on l'approche de près :
1def is_dangerous(weight):
2 if weight > 1000:
3 return True
4 else:
5 return False
6
7print(is_dangerous(5000)) # True (éléphant)
8print(is_dangerous(190)) # False (lion)Ça marche, mais c'est bavard. La comparaison weight > 1000 est déjà en elle-même une valeur True ou False, on peut donc la renvoyer directement :
1def is_dangerous(weight):
2 return weight > 1000
3
4print(is_dangerous(5000)) # TrueLe résultat est identique, et la fonction fait trois lignes de moins. Je te conseille cette forme - moins il y a d'embranchements, moins on risque de se perdre.
Pratique
Écris une fonction qui calcule combien de jours il faut pour parcourir une distance donnée. Exécute la fonction dans l'éditeur et appelle-la avec d'autres valeurs :
Code de cette leçon : main.py
1# Fonctions - calculateur de jours d'expédition
2
3# TODO : définis une fonction qui calcule le nombre de jours
4# distance - distance en km, daily_pace - km par jour
5def calculate_days(distance, daily_pace):
6 days = distance / daily_pace
7 return days
8
9# TODO : appelle la fonction et affiche le résultat
10result = calculate_days(120, 30)
11print(f"L'expédition durera {result} jours")
12
13# Essaie d'autres valeurs :
14print(f"100 km à un rythme de 25 km/jour : {calculate_days(100, 25)} jours")Résumé
Dans cette leçon, tu as créé tes propres outils d'explorateur :
def- définit une fonction (un bloc de code nommé)- L'appel d'une fonction avec
nom() - Les paramètres - des données transmises à la fonction entre parenthèses
return- renvoie un résultat réutilisable- La différence entre
print()(affiche) etreturn(renvoie une valeur)
Félicitations ! Tu connais maintenant les fondamentaux de Python : variables, types, opérateurs, conditions, boucles et fonctions. Il est temps de réunir ces connaissances dans un grand projet d'expédition !
Retiens : une fonction est un outil de ton sac à dos - tu la définis une fois avec def, puis tu t'en sers par un appel aussi souvent que tu veux.
Tu as repéré une erreur dans cette leçon ?
Teste tes connaissances
Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.
1. Quel mot-clé utilise-t-on pour définir une fonction ?
2. À quoi sert return dans une fonction ?
3. En quoi print() diffère-t-il de return ?
Tâches pratiques dans le jeu
- Clique dans l'ordre
Clique sur les éléments pour appeler la fonction greet() :
- Éditeur de code
Définis une fonction calculate_days(distance, daily_pace) qui renvoie distance / daily_pace. Appelle-la pour 150 km à 30 km par jour et affiche le résultat :