• # LMSTFY

    Posté par  . Évalué à 4. Dernière modification le 25 novembre 2021 à 15:18.

  • # décorateur

    Posté par  . Évalué à 2. Dernière modification le 25 novembre 2021 à 21:12.

    Il s'agit d'un décorateur. C'est un remplacement d'une fonction par une autre.

    L'exemple qui illustre :

    def replace_add_by_multiply(func):
        def multiply(x, y):
            return x*y
        return multiply
    
    @replace_add_by_multiply
    def add(a, y):
        return x+y
    
    
    print(add(3, 4)) # prints 12

    Par contre cet exemple apporte de la confusion et ne révèle pas l'utilité des décorateurs, ce qui est une autre question…

    • [^] # Re: décorateur

      Posté par  (Mastodon) . Évalué à 3. Dernière modification le 26 novembre 2021 à 08:05.

      Par contre cet exemple apporte de la confusion et ne révèle pas l'utilité des décorateurs, ce qui est une autre question…

      Je confirme que l'exemple n'est pas très bon car au final il n'utilise pas la fonction décorée.

      Pour moi le décorateur est un "tag" que tu mets à une fonction. L'exemple de Flask est plus parlant :

      @app.route("/dlfp")
      def dlfp():
          return "DLFP RuL3z !"

      Flask définit le décorateur "route". Ainsi, quand tu crées une fonction et que tu la décores par une URL, cette fonction sera appelée par le moteur Flask lorsqu'un visiteur va sur cette URL.

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

    • [^] # Commentaire supprimé

      Posté par  . Évalué à 5. Dernière modification le 26 novembre 2021 à 09:37.

      Ce commentaire a été supprimé par l’équipe de modération.

      • [^] # Re: décorateur

        Posté par  . Évalué à 2.

        N'importe quel objet, pas forcément une fonction.

        C'est aussi souvent une classe, par exemple.

        • [^] # Re: décorateur

          Posté par  . Évalué à 2. Dernière modification le 27 novembre 2021 à 09:16.

          Oui, on peut même en mettre plusieurs!
          @noel
          @clignote
          @sapin
          etc…

        • [^] # Commentaire supprimé

          Posté par  . Évalué à 2.

          Ce commentaire a été supprimé par l’équipe de modération.

          • [^] # Re: décorateur

            Posté par  . Évalué à 2.

            Anéfé, j'avais pas vu la précision en bas et tiqué sur la formulation en haut.

            J'ai pas d'autre exemple courant. On doit pouvoir décorer une variable dans un module, un attribut dans une classe,… mais c'est pas quelque chose que je fais couramment.

    • [^] # Re: décorateur

      Posté par  . Évalué à 3.

      Si ça peut aider à la compréhension, j'ajouterais que ces deux codes sont équivalents :

      @replace_add_by_multiply
      def add(a, y):
          return x+y

      et

      def add(a, y):
          return x+y
      
      add = replace_add_by_multiply(add)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.