![](/img/trans.png)
[英]Python: decorate __call__ and ordinary function with the same decorator?
[英]python decorate function call
我最近了解了装饰器,并想知道是否有可能不在某种函数定义中而是在函数调用中使用它们作为某种通用包装器。
这样做的原因是,我想通过用户定义的接口从模块调用函数,而该接口对函数执行可重复的操作,并且我不想为每个函数实现包装器。
原则上我想
def a(num):
return num
@double
a(2)
返回4,而不需要有机会获得实施的a
。 或者在这种情况下,像
def mutiply(factor,function,*args,**kwargs):
return factor*function(*args,*kwargs)
是更好的选择?
Marty Alchin在Apress撰写的Pro Python书中有非常详细的关于装饰器的部分。
虽然仅在函数/类定义中可以使用新样式的@decorator语法,但是您可以使用较旧的语法,这种方式的作用相同:
from module import myfunc
myfunc = double_decorator(myfunc)
x = myfunc(2) # returns 4
您可以这样做:
def a(num):
return num * 1
def double(f):
def wrapped(*args, **kwargs):
return f(*args, **kwargs)
return wrapped
print(double(a)(2))
这是因为我们可以使用显式的装饰器函数来装饰函数并运行函数,如上例所示。 所以在这个:
print(double(a)(2))
在的地方a
你可以把任何功能和到位的2
,指定参数和kwargs。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.