2.3 L'Art des Fonctions
Une fonction bien écrite est une brique réutilisable. Python offre une flexibilité totale sur les arguments.
1. Arguments Nommés et Défauts
def config_logger(level="INFO", file_path=None):
print(f"Logger défini sur {level}")
# On peut appeler dans n'importe quel ordre !
config_logger(file_path="scan.log", level="DEBUG")
2. Fonctions Variadiques (*args, **kwargs)
Parfois, on ne connaît pas le nombre d'arguments à l'avance.
*args: Capture les arguments positionnels dans un tuple.**kwargs: Capture les arguments nommés dans un dictionnaire.
def send_to_matrix(*noms, **options):
for nom in noms:
print(f"Téléchargement de {nom}...")
if options.get("secure"):
print("Cryptage activé.")
send_to_matrix("Morpheus", "Trinity", secure=True)
3. Lambdas et Auto-loading
- Lambdas : Fonctions anonymes d'une seule ligne. Syntaxe :
lambda params: expression. - Auto-loading :
importlibcharge un module par son nom en chaîne de caractères.
# Une lambda simple
est_pair = lambda x: x % 2 == 0
print(est_pair(4)) # True
print(est_pair(7)) # False
# Importation dynamique
import importlib
math_mod = importlib.import_module("math")
print(math_mod.sqrt(16)) # 4.0
À vous :
doubler = lambda x: x * 2
majuscule = lambda s: s.upper()
print(doubler(7))
print(doubler(0))
print(majuscule("neo"))
print(doubler(7)) # 14
print(doubler(0)) # 0
print(majuscule("neo")) # 'NEO'
4. Fonctions Privées
En Python, le mot-clé private n'existe pas. On utilise la convention de l'underscore : _ma_fonction() indique qu'elle est réservée à un usage interne.