如何制作虚拟的虚空@jit装饰器?

时间:2019-09-03 15:12:08

标签: python decorator python-decorators numba

我希望numba是可选的依赖项,因此,如果已安装,它会很快,如果没有,它会很慢。因此,当未安装numba时,我希望@njit成为不执行任何操作的虚拟装饰器。

如果我遵循these directions并使用:

def njit(func):
    return func

然后,当装饰器的调用方式为@njit(cache=True, nogil=True)时,我会遇到以下错误:

  

TypeError: njit() got an unexpected keyword argument 'cache'

如果我尝试捕获arg并使用忽略它们

    def njit(func, *args, **kwargs):
        return func

然后我得到:

  

missing 1 required positional argument: 'func'

我该如何做一个不做任何事情并忽略kwargs的虚拟装饰器?

2 个答案:

答案 0 :(得分:5)

以装饰器工厂作为参数来考虑装饰器,它们返回装饰器。这样

def decorator(func):
    return func

上面是装饰器,现在带有参数

def decorator_factory(a,b,c):
    def decorator(func):
        return func
    return decorator

内部decorator可以访问a,b,c参数,因为它是一个闭包。希望对您有帮助


因此可以将其定义为:

def njit(*args, **kwargs):
    def decorator(func):
        return func 
    return decorator

答案 1 :(得分:2)

如果您想节省时间并能够对所有的数字装饰器进行相同的操作,请尝试numbasub。它提供了您所要的内容,您可以将其应用于所需的任何项目。