Python : Les fonctions
Définir des fonctions, les arguments (nommés, par défaut, *args/**kwargs), les lambdas et les fonctions comme objets.
Python : Les fonctions
Une fonction se déclare avec def, un : et un corps indenté. Le résultat se renvoie avec return (absent = la fonction renvoie None).
# Définir une fonction
def saluer(nom):
return f"Bonjour {nom}"
saluer("Alice") # "Bonjour Alice"def saluer(nom): return f"Bonjour {nom}" saluer("Alice") # "Bonjour Alice"Une chaîne juste sous la signature sert de docstring (documentation) :
def carre(x):
"""Renvoie le carré de x."""
return x * xdef carre(x): """Renvoie le carré de x.""" return x * x# Les arguments
Python offre beaucoup de souplesse sur les arguments.
# Valeur par défaut
def saluer(nom, politesse="Bonjour"):
return f"{politesse} {nom}"
saluer("Bob") # "Bonjour Bob"
saluer("Bob", politesse="Salut") # argument nommé (keyword)# Valeur par défautdef saluer(nom, politesse="Bonjour"): return f"{politesse} {nom}" saluer("Bob") # "Bonjour Bob"saluer("Bob", politesse="Salut") # argument nommé (keyword)Les arguments nommés rendent l'appel explicite : saluer("Bob", politesse="Salut") se lit tout seul, l'ordre n'importe plus.
Ne mets jamais une valeur par défaut modifiable (def f(liste=[])) : elle est partagée entre tous les appels et se remplit d'un appel à l'autre. Utilise def f(liste=None) puis liste = liste or [] à l'intérieur.
# *args et **kwargs
Pour accepter un nombre variable d'arguments :
def somme(*nombres): # *args : un tuple de positionnels
return sum(nombres)
somme(1, 2, 3) # 6
def config(**options): # **kwargs : un dict de nommés
return options
config(debug=True, port=3000) # {'debug': True, 'port': 3000}def somme(*nombres): # *args : un tuple de positionnels return sum(nombres) somme(1, 2, 3) # 6 def config(**options): # **kwargs : un dict de nommés return options config(debug=True, port=3000) # {'debug': True, 'port': 3000}# Les lambdas
Une fonction anonyme sur une ligne, pour un usage jetable (souvent comme argument) :
carre = lambda x: x * x
carre(5) # 25
# Cas typique : trier par un critère
personnes = [("Alice", 30), ("Bob", 25)]
personnes.sort(key=lambda p: p[1]) # tri par âgecarre = lambda x: x * xcarre(5) # 25 # Cas typique : trier par un critèrepersonnes = [("Alice", 30), ("Bob", 25)]personnes.sort(key=lambda p: p[1]) # tri par âgeAu-delà d'une expression simple, préfère un vrai def : c'est plus lisible et ça peut avoir un nom parlant.
# Les fonctions sont des objets
En Python, une fonction est une valeur comme une autre : on peut la stocker, la passer en argument, la retourner.
def appliquer(fonction, valeur):
return fonction(valeur)
appliquer(carre, 4) # 16 : on passe la fonction elle-mêmedef appliquer(fonction, valeur): return fonction(valeur) appliquer(carre, 4) # 16 : on passe la fonction elle-mêmeC'est la base des fonctions d'ordre supérieur (map, filter, sorted(key=...)).
# La suite
- Les objets (POO) - regrouper données et fonctions dans des classes
- Structures de contrôle - la logique à encapsuler dans tes fonctions
- Python : Introduction - le hub de la série
- Python : mon avis (mitigé) - la prise de recul sur le langage