2010-11-08 821 views
15

¿Hay alguna sintaxis para usar un decorador en una función lambda en Python? Ejemplo:Usando decoradores en lambdas en Python?

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

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

Los resultados en esta salida:

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

Sin embargo, cuando intento lo mismo con una lambda:

@anotherdecorator 
f = lambda x: x * 2 

me sale esto:

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

I siente que esta podría ser una buena manera de hacer lambdas más versátil permitiendo que las declaraciones sean "inyectadas" en ellas. Pero si existe tal característica, no sé cuál es la sintaxis.

Respuesta

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

Exactamente. Y es obvio si sabes cómo funcionan los decoradores. Si no lo haces, probablemente no deberías escribirlos. – delnan

+1

Ojalá hubiera pensado en eso antes. Evita la situación que la sintaxis de '@ decorador' busca combatir, es decir,' f = anotherdecorator (f) '. Aún así, esta es una característica de lenguaje muy útil. –

+5

Antes de la sintaxis '@', algo así era la forma principal de decorar una función (o clase). – martineau