Is there any syn开发者_如何学Ctax for using a decorator on a lambda function in Python? Example:
def simpledecorator(f):
def new_f():
print "Using a decorator: "
f()
return new_f
@simpledecorator
def hello():
print "Hello world!"
Results in this output:
>>> hello()
Using a simple decorator:
Hello world!
Yet when I try the same with a lambda:
@anotherdecorator
f = lambda x: x * 2
I get this:
File "<stdin", line 2
f = lambda x: x * 2
^
SyntaxError: invalid syntax
I feel like this might be a good way to make lambdas more versatile by allowing statements to be "injected" into them. But if there exists such a feature, I don't know what the syntax is.
f = anotherdecorator(lambda x: x * 2)
There appear to be two options which give the functionality, but without the clean syntax:
(1) Keep lambda
and ditch the decorator syntax (as posted by dan04):
f = simpledecorator( lambda : print( "Hello World" ) )
(2) Keep the decorator syntax and use a 1 line def
statement instead of lambda:
@simpledecorator
def f(): print ( "Hello World" )
This 2nd form may be preferable if you want to chain decorators:
@simpledecorator
@simpledecorator
def f(): print ( "Hello World" )
Trying the above using the retry-decorator only gave me syntax errors.
This what I found to be working:
import shutil
from retry_decorator import retry
diskfree = retry(
FileNotFoundError,
timeout_secs = 10,
)(lambda d: shutil.disk_usage(d))(d="/")
精彩评论