如何实现无functools依赖的轻量带参Python dummy装饰器?
错误原因
你当前的写法属于无参装饰器的结构,而@jit(nopython=True)这种带括号传参的调用形式,要求装饰器先接收配置参数、返回真正的装饰器函数,再接收被装饰的目标函数。你直接把func作为第一层参数,调用jit(nopython=True)时没有传入函数对象,自然会触发参数缺失的报错。
极简实现方案
不需要引入functools依赖,直接写两层嵌套结构即可,所有装饰器入参直接忽略,完全满足降级兼容的空实现需求:
def jit(*args, **kwargs): def wrapper(func): return func return wrapper
这个实现直接返回原函数,连多余的内层调用包装都省去,是最轻量的带参空装饰器实现方式,完美支持你要求的@jit(nopython=True)调用形式。
如果需要同时兼容带参、不带参两种装饰器写法(即同时支持@jit和@jit(nopython=True)),只需要加一层简单的判断即可:
def jit(*args, **kwargs): # 适配无参调用场景:@jit if len(args) == 1 and callable(args[0]): return args[0] # 适配带参调用场景:@jit(nopython=True) def wrapper(func): return func return wrapper
内容的提问来源于stack exchange,提问作者Kramer84
相关产品推荐
相关产品推荐

