推荐答案
// www.javascriptcn.com code example
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Something is happening before the function is called.")
result = func(*args, **kwargs)
print("Something is happening after the function is called.")
return result
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()本题详细解读
装饰器的定义
装饰器是 Python 中的一种高级功能,它允许你在不修改原函数代码的情况下,为函数添加额外的功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。
装饰器的使用
在上面的代码中,my_decorator 是一个装饰器函数。它接受一个函数 func 作为参数,并返回一个新的函数 wrapper。wrapper 函数在调用 func 之前和之后分别打印一些信息。
装饰器的语法糖
使用 @ 符号可以将装饰器应用到函数上。例如,@my_decorator 应用于 say_hello 函数,相当于执行了以下代码:
say_hello = my_decorator(say_hello)
装饰器的执行流程
- 当调用
say_hello()时,实际上调用的是wrapper函数。 wrapper函数首先打印"Something is happening before the function is called."。- 然后调用原始的
say_hello函数,并打印"Hello!"。 - 最后,
wrapper函数打印"Something is happening after the function is called."并返回结果。
装饰器的应用场景
装饰器常用于日志记录、权限校验、性能测试等场景,能够在不修改原函数代码的情况下,为函数添加额外的功能。