繁体   English   中英

python装饰函数调用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM