装饰器,我现在的理解就是:如果你有个A函数,觉得功能不够,就可以在A函数上面@B函数,这样实际就形成了一个B+A的函数(其中包裹了A函数的代码),就这么简单。如果你还觉得不够,就在@B上面在@C,形成一个C+(B+A)的函数(其中包裹了B+A的代码)。
如下面的例子:
def wrapper(func):
def inner(*args, **kwargs):
print("在前面执行的代码。。。。")
func()
print("在后面执行的代码...") # 如果不需要执行后面的代码,也可以直接return func()
return inner
# 执行完wrapper后,其实代码并没有执行,只是生成了inner,里面是包裹后的函数代码
# return inner后,f()才实际在执行这个包裹后的函数代码
@wrapper # 这个是装饰器函数
def f():
"""
这是一个用来测试装饰器修复技术的函数
"""
print("哈哈哈")
if __name__ == '__main__':
f()
# 其实上面的 f()实际变成了以下代码
# print("在前面执行的代码。。。。")
# """
# 这是一个用来测试装饰器修复技术的函数
# """
# print("哈哈哈")
# print("在后面执行的代码...")
#返回结果:
在前面执行的代码。。。。
哈哈哈
在后面执行的代码...
```