装饰器可以接受参数,这意味着我们可以在运行时指定一些配置选项。例如,下面是一个带有参数的装饰器,它可以接受一个消息并打印该消息:
def decorator_function(msg):
def wrapper(func):
def inner_wrapper():
print('Before the function is called.')
print(msg)
func()
print('After the function is called.')
return inner_wrapper
return wrapper
@decorator_function('Hello World!')
def say_hello():
print('Hello World!')
say_hello()
在这个例子中,我们定义了一个名为“decorator_function”的装饰器函数,它接受一个消息作为参数并返回一个包装器函数。但是,这次我们定义了一个内部函数“inner_wrapper”,该函数将在被装饰的函数执行之前和之后执行一些操作。
然后,我们将带有参数的装饰器应用于我们的“say_hello”函数。我们将“Hello World!”作为参数传递给装饰器函数,并将结果分配给“say_hello”函数,这意味着我们将“say_hello”函数传递给“decorator_function”函数作为第二个参数,并将“Hello World!”传递给它作为第一个参数。
最后,我们调用“say_hello”函数,它将在执行前和执行后打印一条消息,包括我们传递给装饰器函数的消息。