我希望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的虚拟装饰器?
答案 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。它提供了您所要的内容,您可以将其应用于所需的任何项目。