%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]] > > | [[Code et Développement/Programmation/Lecture de Code - Python/11_dictionnaires\|← Dictionnaires]] | [[Code et Développement/Programmation/Lecture de Code - Python/13_exceptions\|Exceptions →]] | > |:---|---:| %% nav-fin %% # Fonctions Une fonction regroupe un bloc de code réutilisable, identifié par un nom. --- ## Définition et appel ```python def saluer(nom): print(f"Bonjour, {nom} !") saluer("Alice") # affiche Bonjour, Alice ! saluer("Bob") # affiche Bonjour, Bob ! ``` --- ## Paramètres et valeur de retour ```python def carre(x): return x * x print(carre(5)) # affiche 25 r = carre(3) # r vaut 9 ``` `return` arrête la fonction et renvoie une valeur. Sans `return`, la fonction retourne `None`. --- ## Valeurs par défaut ```python def puissance(base, exp=2): return base ** exp puissance(3) # vaut 9 (exp=2 par défaut) puissance(3, 3) # vaut 27 ``` --- ## Retour multiple (tuple) ```python def min_max(lst): return min(lst), max(lst) mini, maxi = min_max([3, 1, 4, 1, 5]) print(mini, maxi) # affiche 1 5 ``` --- ## Portée des variables Les variables définies dans une fonction sont **locales** : elles n'existent pas en dehors. ```python def f(): x = 10 # x local return x print(f()) # affiche 10 print(x) # NameError : x n'existe pas ici ``` --- ## Fonctions lambda (fonctions anonymes) Une lambda est une fonction courte écrite en une ligne. ```python carre = lambda x: x * x carre(4) # vaut 16 addition = lambda a, b: a + b addition(3, 5) # vaut 8 ``` Usage typique : un tri selon un critère choisi. ```python mots = ["banane", "kiwi", "ananas", "fig"] mots.sort(key=lambda m: len(m)) print(mots) # affiche ['fig', 'kiwi', 'banane', 'ananas'] # Trier des tuples par le 2e élément paires = [(1, 5), (3, 2), (2, 8)] paires.sort(key=lambda p: p[1]) print(paires) # affiche [(3, 2), (1, 5), (2, 8)] ``` Le tri de Python est **stable** : deux éléments de même clé gardent leur ordre de départ. « banane » et « ananas » ont 6 lettres. « banane » était avant « ananas » dans la liste, il reste avant après le tri. --- ## Fonctions utiles qui acceptent une clé ```python lst = ["banane", "kiwi", "ananas"] max(lst, key=len) # vaut 'banane' (le premier des plus longs) min(lst, key=len) # vaut 'kiwi' sorted(lst, key=len) # vaut ['kiwi', 'banane', 'ananas'] (tri stable) sorted(lst, key=str.lower) # tri sans tenir compte des majuscules ``` --- ## Récursivité Une fonction peut s'appeler elle-même. Cette notion a sa propre compétence : [[Code et Développement/Programmation/Récursivité/01_Cours Récursivité|Récursivité]]. ## À vous **À manipuler :** prédisez la sortie, ligne par ligne. ```sq-affiche def double(x): return 2 * x def affiche_double(x): print(2 * x) a = double(4) b = affiche_double(4) print(a) print(b) --- réponse: 8\n8\nNone explication: affiche_double affiche 8 pendant l'appel, puis renvoie None faute de return. double renvoie 8 sans rien afficher. ``` ```sq-affiche x = 5 def f(x): x = x + 1 return x print(f(x)) print(x) --- saisie: lignes réponse: 6\n5 explication: le x de la fonction est local. La variable x du programme principal garde la valeur 5. ``` ```sq-affiche mots = ["kiwi", "fraise", "noix", "melon"] print(sorted(mots, key=len)) print(max(mots, key=len)) --- saisie: lignes réponse: ['kiwi', 'noix', 'melon', 'fraise']\nfraise explication: le tri est stable : kiwi et noix ont 4 lettres et gardent leur ordre de départ. ``` %% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]] > > | [[Code et Développement/Programmation/Lecture de Code - Python/11_dictionnaires\|← Dictionnaires]] | [[Code et Développement/Programmation/Lecture de Code - Python/13_exceptions\|Exceptions →]] | > |:---|---:| %% nav-fin %%