Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les décorateurs

Anonyme
    20 août 2010 à 12:29:37

    Bonjour,

    C'est énorme ce que c'est encore loin d'être intuitif pour moi. Les décorateurs est une de mes principales difficultés et je cherche le déclic.

    Voilà un code que je teste et qui ne fait pas ce que je souhaite, et pourquoi je ne sais pas.

    def log(func):
        print "BEGIN"
        return func
        print "END"
    
    @log
    def add(a):
        print a+3
    
    add(3)
    


    Le résultat est :

    BEGIN
    6


    Or moi je voulais :

    BEGIN
    6
    END


    Pourquoi j'ai pas le END ?

    Il y a quelques choses que j'ai pas percuté, mais je ne sais pas quoi o_O

    C'est bon j'ai trouvé, c'est le return qui me faisait merder mon code

    def log(func):
        def gave(arg):
            print "BEGIN"
            fonction=func(arg)
            print "END"
            return fonction
        return gave
    
    @log
    def add(a):
        print a+3
    
    add(3)
    


    Encore mieux

    >>> def dec(func):
            def args(arg):
                    print "BEGIN"
                    print func(arg)
                    print "END"
            return args
    
    >>> @dec
    def add(a):
            return a+3


    Je commence à voir l'utilité des décorateurs :)
    • Partager sur Facebook
    • Partager sur Twitter
      21 août 2010 à 13:20:36

      /autopub

      Un article (de débutant) sur mon blog, à propos des décorateurs. En un mot, les décorateurs sont pythonniques, sexys et parfaitement utile et lisible quand le besoin s'en fait ressentir. Bref, il faut savoir s'en servir.

      De rien. :-)

      (Ouais donc, le principe des constructeurs, c'est d'avoir une fonction dans une fonction, hein)
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        21 août 2010 à 19:32:07

        Merci pour le lien.

        En effet c'est très utile :)
        • Partager sur Facebook
        • Partager sur Twitter
          22 août 2010 à 8:48:19

          Bonjour,
          après l'exécution d'un return, on quitte la fonction courante et on n'exécute pas ce qui suit. Donc ton `print "END"` ne sera jamais exécuté car précédé d'un return. Voilou ^^

          tcpc_: Intéressant ton blog ^^
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            22 août 2010 à 9:46:22

            Citation

            après l'exécution d'un return, on quitte la fonction courante et on n'exécute pas ce qui suit. Donc ton `print "END"` ne sera jamais exécuté car précédé d'un return



            Oui oui je l'ai remarqué, merci, dans les posts précédents je le dis ;)

            • Partager sur Facebook
            • Partager sur Twitter

            Les décorateurs

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown