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.

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

# 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.

Chapitre précédent Chapitre suivant : Le Parser de Scan