如何将装饰器应用于lambdas?

Raf*_*ler 21 python syntax lambda decorator

是否有任何语法在Python中的lambda函数上使用装饰器?例:

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

@simpledecorator
def hello():
    print "Hello world!"
Run Code Online (Sandbox Code Playgroud)

结果输出:

>>> hello()
Using a simple decorator:
Hello world!
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试使用lambda时:

@anotherdecorator
f = lambda x: x * 2
Run Code Online (Sandbox Code Playgroud)

我明白了:

  File "<stdin", line 2
    f = lambda x: x * 2
    ^
 SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

我觉得这可能是一个很好的方法,通过允许语句"注入"它们使lambdas更加通用.但如果存在这样的功能,我不知道语法是什么.

dan*_*n04 39

f = anotherdecorator(lambda x: x * 2)
Run Code Online (Sandbox Code Playgroud)

  • 在`@`语法之前,像这样的东西是装饰函数(或类)的主要方式. (6认同)
  • 究竟.如果您知道装饰器是如何工作的,那很明显.如果你不这样做,你应该不应该写它们. (5认同)
  • 我希望我早点想到这一点。它确实避免了`@decorator` 语法试图对抗的情况,即`f = anotherdecorator(f)`。尽管如此,这是一个非常有用的语言功能。 (2认同)
  • 语法错误,删除返回f = anotherdecorator(lambda x:x*2) (2认同)