CodeWalk

带参数的装饰器如何实现

作者:Yahuda · 2026-05-30 12:55

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 或类装饰器实现。