如何制作一个虚拟的什么都不做的@jit 装饰器?
How do I make a dummy do-nothing @jit decorator?
我希望 numba 成为一个可选的依赖项,以便安装时速度快,不安装时速度慢。因此,当没有安装 numba 时,我希望 @njit
成为一个什么都不做的虚拟装饰器。
如果我遵循 these directions 并使用:
def njit(func):
return func
然后当像 @njit(cache=True, nogil=True)
这样调用装饰器时,我得到以下错误:
TypeError: njit() got an unexpected keyword argument 'cache'
如果我尝试捕获参数并使用
忽略它们
def njit(func, *args, **kwargs):
return func
然后我得到:
missing 1 required positional argument: 'func'
我如何制作一个什么都不做并且忽略 kwargs 的虚拟装饰器?
将带有参数的装饰器视为装饰器工厂,它们 return 是一个装饰器。这样
def decorator(func):
return func
上面是一个装饰器,现在有参数
def decorator_factory(a,b,c):
def decorator(func):
return func
return decorator
内部 decorator
可以访问 a,b,c
参数,因为它是一个闭包。希望对您有所帮助
所以可以定义为:
def njit(cache, nogil):
def decorator(func):
return func
return decorator
如果您想节省一些时间并能够对所有 numba 装饰器执行相同的操作,请尝试 numbasub。它提供的正是您所要求的,您可以将其应用到您想要的任何项目中。
我希望 numba 成为一个可选的依赖项,以便安装时速度快,不安装时速度慢。因此,当没有安装 numba 时,我希望 @njit
成为一个什么都不做的虚拟装饰器。
如果我遵循 these directions 并使用:
def njit(func):
return func
然后当像 @njit(cache=True, nogil=True)
这样调用装饰器时,我得到以下错误:
TypeError: njit() got an unexpected keyword argument 'cache'
如果我尝试捕获参数并使用
忽略它们 def njit(func, *args, **kwargs):
return func
然后我得到:
missing 1 required positional argument: 'func'
我如何制作一个什么都不做并且忽略 kwargs 的虚拟装饰器?
将带有参数的装饰器视为装饰器工厂,它们 return 是一个装饰器。这样
def decorator(func):
return func
上面是一个装饰器,现在有参数
def decorator_factory(a,b,c):
def decorator(func):
return func
return decorator
内部 decorator
可以访问 a,b,c
参数,因为它是一个闭包。希望对您有所帮助
所以可以定义为:
def njit(cache, nogil):
def decorator(func):
return func
return decorator
如果您想节省一些时间并能够对所有 numba 装饰器执行相同的操作,请尝试 numbasub。它提供的正是您所要求的,您可以将其应用到您想要的任何项目中。