Dsc*_*oni 6 python decorator wrapper
我最近了解了装饰器,并想知道是否可以在函数定义中使用它们,而不是在函数调用中,作为某种通用包装器.
原因是,我想通过用户定义的接口从模块调用函数,该接口对函数执行可重复的操作,并且我不想为每个函数实现包装器.
原则上我想有类似的东西
def a(num):
return num
@double
a(2)
Run Code Online (Sandbox Code Playgroud)
返回4而无需访问实现a
.或者在这种情况下是一个全局包装器
def mutiply(factor,function,*args,**kwargs):
return factor*function(*args,*kwargs)
Run Code Online (Sandbox Code Playgroud)
是更好的选择?
你可以这样做:
def a(num):
return num * 1
def double(f):
def wrapped(*args, **kwargs):
return f(*args, **kwargs)
return wrapped
print(double(a)(2))
Run Code Online (Sandbox Code Playgroud)
这是因为我们可以使用明确的装饰器函数来装饰函数和运行函数,如上例所示.所以在这一个:
print(double(a)(2))
Run Code Online (Sandbox Code Playgroud)
代替a
你,你可以放任何功能,代替2
args和kwargs.
有在马蒂Alchin的书装饰了很好的详细部分专业的Python Apress出版.
虽然新样式@decorator语法只能在函数/类定义中使用,但您可以使用较旧的语法,这样做的方式相同:
from module import myfunc
myfunc = double_decorator(myfunc)
x = myfunc(2) # returns 4
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5497 次 |
最近记录: |