2010-11-08 3 views
15

Есть ли какой-либо синтаксис для использования декоратора на лямбда-функции в Python? Пример:Использование декораторов на лямбдах в Python?

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

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

Результаты в этом выводе:

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

Но когда я пытаюсь то же самое с лямбда:

@anotherdecorator 
f = lambda x: x * 2 

Я получаю это:

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

I чувствую, что это может быть хорошим способом сделать лямбда более универсальным, позволяя операторам «вводить» в них. Но если существует такая функция, я не знаю, что такое синтаксис.

ответ

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

Точно. И это очевидно, если вы знаете, как работают декораторы. Если вы этого не сделаете, вы, возможно, не должны писать их. – delnan

+1

Хотел бы я подумать об этом раньше. Это позволяет избежать ситуации, когда синтаксис '@ decorator' пытается бороться, т. Е.' F = anotherdecorator (f) '. Тем не менее, это очень полезная функция языка. –

+5

Перед синтаксисом '@' что-то вроде этого было основным способом украшения функции (или класса). – martineau

Смежные вопросы