装饰器
定义:本质是函数,(只不过是用来装饰其他函数而已),就是为其他函数添加附加功能
原则:
- 1. 不能修改被修饰函数的源代码
- 2.不能修改被修饰函数的调用方式
实现装饰器的知识储备
- 1.函数即“变量”
- 2.高阶函数
- a.把一个函数名当做实参传给另外一个函数
- b.返回值中包含函数名
- 3.嵌套函数
综上,高阶函数 + 嵌套函数 ===> 装饰器
程序示例:
def fun(bar):
def dec():
print('this is dec')
bar()
return dec
@fun #test = fun(test) test = dec
#####################下面是被装饰函数##########################
def test():
print('test is here')
test()
把text传给bar的时候,bar就相当于之前的text了,在执行@fun的时候,函数fun(text)运行后,返回dec给text,那么此时text已经不是之前的text了,此时text已经成了dec,也就是我们的装饰函数,由于之前我们把text悄悄传给了bar,那么装饰函数运行完之后,调用bar()就解决了。
记住:返回值包含函数名
此处建议断点调试