在Python中的lambda函数上使用装饰器是否有任何语法?例如:
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!
然而,当我尝试使用lambda时:
@anotherdecorator
f = lambda x: x * 2
我明白了:
File "<stdin", line 2
f = lambda x: x * 2
^
SyntaxError: invalid syntax
我觉得这可能是一个很好的方法,通过允许语句“注入”它们使lambdas更加通用。但如果存在这样的功能,我不知道语法是什么。
答案 0 :(得分:36)
f = anotherdecorator(lambda x: x * 2)
答案 1 :(得分:2)
似乎有两个选项可以提供功能,但是没有简洁的语法:
(1)保留lambda
并放弃装饰器语法(如dan04发布):
f = simpledecorator( lambda : print( "Hello World" ) )
(2)保留装饰器语法,并使用1行def
语句代替lambda:
@simpledecorator
def f(): print ( "Hello World" )
如果要链接装饰器,则最好使用第二种形式:
@simpledecorator
@simpledecorator
def f(): print ( "Hello World" )
答案 2 :(得分:0)
使用 retry-decorator 尝试上述操作只会给我带来语法错误。
这是我发现的工作:
import shutil
from retry_decorator import retry
diskfree = retry(
FileNotFoundError,
timeout_secs = 10,
)(lambda d: shutil.disk_usage(d))(d="/")