4. Fonctions
def, paramètres positionnels/nominaux,return,lambda, portée, annotations de type.
4.1 Définition
def saluer(nom):
"""Affiche un salut.""" # docstring (accès via help(saluer))
print(f"Bonjour {nom}!")4.2 Paramètres
Positionnels :
def f(a, b, c):
return a + b + c
f(1, 2, 3)Nominaux (keyword) :
f(b=2, c=3, a=1)Valeurs par défaut :
def f(a, b=10):
return a + b
f(5) # 15
f(5, 3) # 8Attention : la valeur par défaut est évaluée une fois à la définition :
def f(items=[]): # ⚠️ mutable partagé entre appels
items.append(1)
return itemsSolution : None + création dans le corps.
def f(items=None):
if items is None:
items = []
items.append(1)
return items4.3 *args et **kwargs
def f(*args, **kwargs):
"""args = tuple, kwargs = dict"""
print(args, kwargs)
f(1, 2, x=3) # (1, 2) {'x': 3}Unpacking à l’appel :
vals = [1, 2, 3]
f(*vals) # f(1, 2, 3)
d = {"a": 1, "b": 2}
f(**d) # f(a=1, b=2)4.4 Paramètres uniquement positionnels ou nominaux
def f(pos_only, /, pos_or_kwd, *, kwd_only):
pass- Avant
/: positionnels uniquement. - Après
*: nominaux uniquement.
4.5 return
def carré(x):
return x ** 2
def rien():
return # retourne None implicitement4.6 Portée (scope)
x = "globale"
def f():
x = "locale" # variable locale
print(x)
f() # "locale"
print(x) # "globale"def f():
global x # modifie la variable globale
x = "modifiée"4.7 lambda
Fonction anonyme, expression d’une ligne :
carré = lambda x: x ** 2
carré(5) # 25Typiquement utilisée avec map(), filter(), sorted() :
nombres = [1, 4, 2, 8, 5]
sorted(nombres, key=lambda x: -x) # [8, 5, 4, 2, 1]4.8 Annotations de type (PEP 484)
def addition(a: int, b: int) -> int:
return a + bStatique : mypy script.py. Non vérifié à l’exécution.
from typing import Optional, List, Dict
def traiter(noms: List[str], seuil: Optional[float] = None) -> Dict[str, int]:
...4.9 Docstrings
def http_error(status: int) -> str:
"""Retourne le message d'erreur HTTP.
Args:
status: Code HTTP (4xx, 5xx).
Returns:
Message lisible.
"""
match status:
case 404:
return "Non trouvé"
case 500:
return "Erreur interne"
case _:
return "Erreur inconnue"