end*_*ith 5 python decorator python-decorators numba
我希望 numba 是一个可选的依赖项,以便安装时速度很快,如果不安装则速度很慢。所以当没有安装 numba 时,我想@njit成为一个什么都不做的虚拟装饰者。
如果我遵循这些说明并使用:
def njit(func):
return func
Run Code Online (Sandbox Code Playgroud)
然后当装饰器被调用时,@njit(cache=True, nogil=True)我收到以下错误:
TypeError: njit() got an unexpected keyword argument 'cache'
如果我尝试捕获参数并使用忽略它们
def njit(func, *args, **kwargs):
return func
Run Code Online (Sandbox Code Playgroud)
然后我得到:
missing 1 required positional argument: 'func'
我如何制作一个什么都不做并且忽略 kwargs 的虚拟装饰器?
将带参数的装饰器视为装饰器工厂,它们返回一个装饰器。这边走
def decorator(func):
return func
Run Code Online (Sandbox Code Playgroud)
上面是一个装饰器,现在有参数
def decorator_factory(a,b,c):
def decorator(func):
return func
return decorator
Run Code Online (Sandbox Code Playgroud)
内部decorator可以访问a,b,c参数,因为它是一个闭包。我希望有帮助
所以可以定义为:
def njit(cache, nogil):
def decorator(func):
return func
return decorator
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |