%% 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 %%