2010-11-08 4 views
15

Existe-t-il une syntaxe pour utiliser un décorateur sur une fonction lambda en Python? Exemple:Utilisant des décorateurs sur des lambdas en Python?

def simpledecorator(f): 
    def new_f(): 
     print "Using a decorator: " 
     f() 
    return new_f 

@simpledecorator 
def hello(): 
    print "Hello world!" 

résultats dans cette sortie:

>>> hello() 
Using a simple decorator: 
Hello world! 

Pourtant, lorsque je tente la même chose avec un lambda:

@anotherdecorator 
f = lambda x: x * 2 

Je reçois ceci:

File "<stdin", line 2 
    f = lambda x: x * 2 
    ^
SyntaxError: invalid syntax 

I se sentir comme cela pourrait être un bon moyen de faire des lambdas plus polyvalent en permettant aux énoncés d'y être «injectés». Mais s'il existe une telle fonctionnalité, je ne sais pas quelle est la syntaxe.

Répondre

29
f = anotherdecorator(lambda x: x * 2) 
+5

Exactement. Et c'est évident si vous savez comment fonctionnent les décorateurs. Si vous ne le faites pas, vous ne devriez probablement pas les écrire. – delnan

+1

J'aurais aimé y penser plus tôt. Cela évite la situation que la syntaxe '@ decorator' cherche à combattre, c'est-à-dire' f = anotherdecorator (f) '. Encore, c'est une fonctionnalité de langue très utile. –

+5

Avant la syntaxe '@', quelque chose comme ça était le principal moyen de décorer une fonction (ou une classe). – martineau

Questions connexes