这个函数,允许直接作为装饰器使用或者通过函数调用的方式获得装饰器,前提是这个函数的第一个位置参数不是一个可调用的对象。
1
2
3
4
5
6
7
8
| def decorator(*args, **kwargs):
def wrapper(fun):
def inner(*inner_args, **inner_kwargs):
return fun(*inner_args, **inner_kwargs)
return inner
if len(args) == 1 and len(kwargs) == 0 and callable(p := args[0]):
return wrapper(p)
return wrapper
|