Définition des fonctions en Python
Les fonctions permettent d'encapsuler un bloc de code effectuant une tâche spécifique. Elles peuvent être appelées à chaque besoin, simplifiant la réutilisation du code.
Syntaxe de base
def ma_fonction():
# Corps de la fonction contenant le code encapsulé
Pour utiliser la fnoction, appelez-la par son nom :
ma_fonction()
Avantages des fonctions
- Regrouper le code répétitif pour une meilleure lisibilité
- Permettre des appels concis
- Faciliter les modifications globales en un seul endroit
Exemple : une routine quotidienne encapsulée.
def routine_journaliere():
print("1. Prendre le bus")
print("2. Faire les courses")
print("3. Négocier les prix")
print("4. Rentrer chez soi")
print("5. Préparer le repas")
routine_journaliere()
print("S'occuper des enfants")
routine_journaliere()
print("Nettoyer la salle de bain")
routine_journaliere()
print("Jouer aux jeux vidéo")
Paramètres des fonctions
Les paramètres permettent de transmettre des informations lors de l'appel d'une fonction. Ils se divisent en deux catégories : les paramètres formels (définis) et les paramètres réels (passés).
Paramètres réels (arguments)
- Arguments positionnels : transmis selon l'ordre dans l'appel.
- Arguments par mot-clé : transmis en spécifiant le nom du paramètre.
- Arguments mixtes : combinaison des deux, avec les positionnels avant les mots-clés.
Tous les paramètres formels doivent recevoir une valeur lors de l'exécution.
Exemple : une fonction pour insulter avec des paramètres.
def critiquer(cible, intensite):
print("1. Regarder fixement", cible)
print("2. Faire des remontrances sévères", cible)
if intensite > 99:
print("3. Être impoli extrêmement")
else:
print("3. Dire quelque chose de léger")
print("4. Terminer l'échange")
critiquer("vieux clavier", 188)
critiquer("souris défectueuse", 10)
critiquer("ordinateur lent", 999)
Paramètres formels
- Paramètres positionnels : définis dans l'ordre de la fonction.
- Paramètres par défaut : valeurs par défaut assignées, utilisées si aucun argument n'est fourni.
- Paramètres dynamiques :
*argspour un nombre variable d'arguments positionnels, stockés dans un tuple.**kwargspour un nombre variable d'arguments par mot-clé, stockés dans un dictionnaire.
- Paramètres par mot-clé obligatoires : doivent être passés par nom, définis après
*.
Ordre recommandé des paramètres formels : posisionnels > *args > par défaut (via mot-clé) > **kwargs.
Exemple de calculatrice avec paramètres
def calculer(val1, operateur, val2):
if operateur == "+":
print(val1 + val2)
elif operateur == "-":
print(val1 - val2)
elif operateur == "*":
print(val1 * val2)
elif operateur == "/":
print(val1 / val2)
else:
print("Opération non supportée")
calculer(500, "+", 300)
calculer(500, "-", 300)
calculer(500, "*", 300)
calculer(500, "/", 300)
calculer(500, "?", 300)
Paramètres par défaut et dynamiques
Pour des arguments positionnels avec une valeur par défaut :
def enregistrer(nom, age, genre="homme"):
print(nom, age, genre)
enregistrer("Alice", 25)
enregistrer("Bob", 30)
enregistrer("Charlie", 35)
enregistrer("Diana", 40, "femme")
Arguments dynamiques positionnels avec *args :
def manger(*aliments):
print(aliments)
manger("riz", "poulet", "salade")
manger("pain") # Résultat : ('pain',) – un tuple avec un élément
Arguments dynamiques par mot-clé avec **kwargs :
def composer(**ingredients):
print(ingredients)
composer(plat="pizza", sauce="tomate")
Ordre correct des paramètres mixtes
def fonction_generale(a, b, *args, c="défaut", **kwargs):
print(a, b, c, args, kwargs)
fonction_generale(1, 2, 3, 4, 5, d=6, e=7, c="personnalisé")
Ici, c reçoit la valeur par mot-clé, et les arguments restants sont capturés.
Utilisation avec des listes et dictionnaires
Déballer une liste en arguments positionnels :
liste_eleves = ["Luc", "Marie", "Paul", "Sophie"]
def afficher(*noms):
print(noms)
afficher(*liste_eleves) # Équivalent à afficher("Luc", "Marie", "Paul", "Sophie")
Déballer un dictionnaire en arguments par mot-clé :
dict_info = {"nom": "Luc", "classe": "A", "note": 85}
def afficher_info(**donnees):
print(donnees)
afficher_info(**dict_info)