bonjour à tous,
je m'interroge sur la différence entre ces deux codes
je cherche une logique à la transmission de la fonction au décorateur et
au role des () après le décorateur.
Un coup on transmet une fonction , l'autre coup c'est une condition et
la fonction est transmise au wrapper
C'est un peu trop magique pour moi
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Amaury Forgeot d'Arc
bonjour à tous, je m'interroge sur la différence entre ces deux codes je cherche une logique à la transmission de la fonction au décorateur et au role des () après le décorateur. Un coup on transmet une fonction , l'autre coup c'est une condition et la fonction est transmise au wrapper C'est un peu trop magique pour moi
Ce qu'on peut comparer dans ces deux morceaux de code, ce sont les fonctions "wrapper" et "enveloppeur": elles prennent toutes deux la place de la fonction à décorer. On peut aussi mettre en parallèle "require_int" et "undecorateur": elles prennent la fonction originale en paramètre, et renvoient une autre fonction à la place. C'est ça, un décorateur.
Et le "requis" du deuxième exemple? cette fonction sert simplement à créer un décorateur ("undecorateur") spécialisé pour le test demandé. Alors que "require_int" est un décorateur câblé pour vérifier le type de l'argument.
Dans tous les cas, quand on ne s'y retrouve plus, on peut se rappeler qu'un décorateur n'est qu'un truc de syntaxe, et qu'on peut écrire comme ceci:
def meth(arg): print arg meth = require_int(meth)
def test(*args): print args[0] test = requis("len(__args)==1")(test)
C'est tout pareil.
-- Amaury
bonjour à tous,
je m'interroge sur la différence entre ces deux codes
je cherche une logique à la transmission de la fonction au décorateur et
au role des () après le décorateur.
Un coup on transmet une fonction , l'autre coup c'est une condition et
la fonction est transmise au wrapper
C'est un peu trop magique pour moi
Ce qu'on peut comparer dans ces deux morceaux de code, ce sont les
fonctions "wrapper" et "enveloppeur": elles prennent toutes deux la
place de la fonction à décorer.
On peut aussi mettre en parallèle "require_int" et "undecorateur": elles
prennent la fonction originale en paramètre, et renvoient une autre
fonction à la place. C'est ça, un décorateur.
Et le "requis" du deuxième exemple? cette fonction sert simplement à
créer un décorateur ("undecorateur") spécialisé pour le test demandé.
Alors que "require_int" est un décorateur câblé pour vérifier le type de
l'argument.
Dans tous les cas, quand on ne s'y retrouve plus, on peut se rappeler
qu'un décorateur n'est qu'un truc de syntaxe, et qu'on peut écrire comme
ceci:
def meth(arg):
print arg
meth = require_int(meth)
def test(*args):
print args[0]
test = requis("len(__args)==1")(test)
bonjour à tous, je m'interroge sur la différence entre ces deux codes je cherche une logique à la transmission de la fonction au décorateur et au role des () après le décorateur. Un coup on transmet une fonction , l'autre coup c'est une condition et la fonction est transmise au wrapper C'est un peu trop magique pour moi
Ce qu'on peut comparer dans ces deux morceaux de code, ce sont les fonctions "wrapper" et "enveloppeur": elles prennent toutes deux la place de la fonction à décorer. On peut aussi mettre en parallèle "require_int" et "undecorateur": elles prennent la fonction originale en paramètre, et renvoient une autre fonction à la place. C'est ça, un décorateur.
Et le "requis" du deuxième exemple? cette fonction sert simplement à créer un décorateur ("undecorateur") spécialisé pour le test demandé. Alors que "require_int" est un décorateur câblé pour vérifier le type de l'argument.
Dans tous les cas, quand on ne s'y retrouve plus, on peut se rappeler qu'un décorateur n'est qu'un truc de syntaxe, et qu'on peut écrire comme ceci:
def meth(arg): print arg meth = require_int(meth)
def test(*args): print args[0] test = requis("len(__args)==1")(test)
C'est tout pareil.
-- Amaury
jean-marc pouchoulon
def test(*args): print args[0] test = requis("len(__args)==1")(test)
C'est tout pareil.
ok c'est clair
merci
def test(*args):
print args[0]
test = requis("len(__args)==1")(test)