带参数的装饰器如何实现
Python 中如何实现带参数的装饰器?请举例说明。
回答
Yahuda
带参数的装饰器需要三层嵌套:外层接收参数,中层接收函数,内层实现包装逻辑。
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(n):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
@repeat(3)
def greet(name):
print(f'Hello {name}')
等效于 greet = repeat(3)(greet)。也可以使用 functools.partial 或类装饰器实现。