带参数的装饰器是指可以接受参数并返回一个装饰器函数的函数。这个装饰器函数会接受原始函数作为参数,并且在函数的运行前后执行一些附加操作。
以下是一个示例:
def decorator_with_arguments(arg1, arg2):
def decorator(func):
def wrapper(*args, **kwargs):
print("Decorator arguments:", arg1, arg2)
func(*args, **kwargs)
print("Decorator finished")
return wrapper
return decorator
在这个例子中,decorator_with_arguments
接受两个参数 arg1
和 arg2
,然后返回一个装饰器函数 decorator
。decorator
接受一个函数作为参数,并返回一个新的函数 wrapper
。wrapper
函数在运行原始函数之前和之后打印出一些信息。
使用带参数的装饰器,例如:
@decorator_with_arguments("hello", 123)
def say_hello():
print("Hello World!")
say_hello()
输出结果:
Decorator arguments: hello 123
Hello World!
Decorator finished
在这个示例中,我们将 decorator_with_arguments
应用到 say_hello
函数上,同时传递了两个参数 "hello"
和 123
。然后,当我们调用 say_hello
函数时,实际上调用的是 wrapper
函数。在 wrapper
函数内部,我们先打印出了装饰器的参数值,然后调用了原始函数 say_hello
。当 say_hello
函数运行完毕后,我们再打印一条信息,表示装饰器的工作已经完成。