• PYTHON > les fonctions

       

       

      def nomFonction (paramètres) :
         #Bloc d'instructions

       

      toute fonction doit renvoyer un résultat

      valeurs par défaut

      def additionne (x=1,y=2):
         return x+y
      
      additione(3)
      5
      additionne(y=3)
      4

       

      Cette syntaxe permet de changer l’ordre d’apparition des paramètres.

      *args et **kwargs

      *args pour des arguments positionnels et **kwargs pour des arguments nommés

      *args

      *args renvoie des tuples.

       

      def args_example(*args):
          print(args)
      
      args_example(1)
      (1,)
      args_example(1,2,3,4,5)
      (1, 2, 3, 4, 5)

      **kwargs

      **kwargs capture tous les arguments nommés passés à la fonction sous forme d’un dictionnaire.

       

      def infos(**kwargs):
          for cle, valeur in kwargs.items():
              print(cle + ': ' + valeur)
      
      infos(un='1')
      un: 1
      
      infos(un='1', deux='2', trois='3')
      un: 1
      deux: 2
      trois: 3
      
      infos(nom="toto", age=30, ville="Paris")

       

      Combiner arguments positionnels (*args) et nommés (**kwargs)

      def ma_fonction(arg1, *args, **kwargs):
         print(f"Argument positionnel : {arg1}")
         print(f"Arguments supplémentaires positionnels : {args}")
         print(f"Arguments nommés : {kwargs}")
      ma_fonction("Bonjour", 1, 2, 3, nom="Pierre", age=25)

       

      3. Déballer un dictionnaire en arguments nommés

      def configurer(base_url, timeout, headers):
         print(f"URL: {base_url}, Timeout: {timeout}, Headers: {headers}")
         params = {
            "base_url": "https://api.example.com",
            "timeout": 10,
            "headers": {"Content-Type": "application/json"}
         }
      configurer(**params)  # Équivalent à configurer(base_url=..., timeout=..., headers=...)

      URL: https://api.example.com, Timeout: 10, Headers: {‘Content-Type’: ‘application/json’}

       

      4. Cas pratique : Fonction avec paramètres optionnels

      def creer_utilisateur(nom, email, **options):
         utilisateur = {
            "nom": nom,
            "email": email,
            **options  # Fusionne les options supplémentaires
         }
         return utilisateur
      
      # Appel avec des options supplémentaires
      user = creer_utilisateur(
         nom="Bob",
         email="bob@example.com",
         age=28,
         role="admin"
      )

       

      Bonnes pratiques : Vérifiez les clés dans kwargs si nécessaire (ex: if ‘age’ not in kwargs: …).

       

      Wrapper de fonction

      def logger(fonction):
      def wrapper(*args, **kwargs):
      print(f"Appel de {fonction.__name__} avec args={args}, kwargs={kwargs}")
      return fonction(*args, **kwargs)
      return wrapper
      
      @logger
      def multiplier(x, y):
      return x * y
      
      multiplier(3, y=5)  # Sortie : "Appel de multiplier avec args=(3,), kwargs={'y': 5}"

       

      Résumé : Les arguments nommés (**kwargs) offrent une grande flexibilité pour créer des wrappers ou des décorateurs.

 

Aucun commentaire

 

Laissez un commentaire