Python 如何将装饰器应用于lambdas?
在Python中,对lambda函数使用decorator有什么语法吗?例如:Python 如何将装饰器应用于lambdas?,python,syntax,lambda,decorator,Python,Syntax,Lambda,Decorator,在Python中,对lambda函数使用decorator有什么语法吗?例如: def simpledecorator(f): def new_f(): print "Using a decorator: " f() return new_f @simpledecorator def hello(): print "Hello world!" 此输出中的结果: 你好() 使用简单的装饰器: 你好,世界! 然而,当我试着用兰姆
def simpledecorator(f):
def new_f():
print "Using a decorator: "
f()
return new_f
@simpledecorator
def hello():
print "Hello world!"
此输出中的结果:
你好()
使用简单的装饰器:
你好,世界!
然而,当我试着用兰姆达做同样的事情时:
@anotherdecorator
f = lambda x: x * 2
我明白了:
File”似乎有两个选项提供了功能,但没有清晰的语法:
(1) 保留lambda
并放弃decorator语法(由dan04发布):
f=SimpleCorator(lambda:print(“Hello World”)
(2) 保留decorator语法,并使用一行def
语句代替lambda:
@simpledecorator
def f(): print ( "Hello World" )
如果您希望连锁装饰师,则第二种形式可能更可取:
@simpledecorator
@simpledecorator
def f(): print ( "Hello World" )
尝试以上使用只会给我语法错误
这就是我发现有效的方法:
import shutil
from retry_decorator import retry
diskfree = retry(
FileNotFoundError,
timeout_secs = 10,
)(lambda d: shutil.disk_usage(d))(d="/")
我希望我早一点就想到这一点。它确实避免了@decorator
语法试图对抗的情况,即f=anotherdecorator(f)
。不过,这是一个非常有用的语言特性。在@
语法之前,类似这样的东西是修饰函数(或类)的主要方式。语法错误,请删除返回的f=anotherdecorator(lambda x:x*2)
import shutil
from retry_decorator import retry
diskfree = retry(
FileNotFoundError,
timeout_secs = 10,
)(lambda d: shutil.disk_usage(d))(d="/")