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)   # 8

Attention : la valeur par défaut est évaluée une fois à la définition :

def f(items=[]):   # ⚠️ mutable partagé entre appels
    items.append(1)
    return items

Solution : None + création dans le corps.

def f(items=None):
    if items is None:
        items = []
    items.append(1)
    return items

4.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 implicitement

4.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)  # 25

Typiquement 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 + b

Statique : 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"

🔗 ← Retour au cours · ← précédent · Suivant →