Python——装饰器
装饰器本质就是函数,功能是为其他函数添加附加功能
原则有二:
1、不修改被修饰函数的源代码
2、不修改被修饰函数的调用方式
装饰器=高阶函数+函数嵌套+闭包
高阶函数定义:
1、函数接受的参数是一个函数名
2、函数的返回值是一个函数名
满足上述条件任意一个,即是高阶函数
**猜想:**如果把高阶函数的两个条件结合使用,能附加新的功能吗(达到装饰器的效果)?
结果是多运行了一步。
即便把高阶函数的两个条件结合使用,也不能达到装饰器的效果。
函数嵌套可以包含闭包。
闭包:把主要变量封装起来,封装在最里面那层;也可以给最外层传变量,最底层接收变量。(即最低层才有变量,其他层没有变量)
当把高阶函数跟函数嵌套跟闭包结合起来,就是装饰器!
例子:
为test函数增加了计时功能,既没有改变源代码与运行方式,又增加了新功能。
但是,在这一块:
test = timer(test)
test()
有赋值操作;如果有很多函数,则需要一个个去赋值,相当麻烦!
所以最终代码为:
这里:
@timer 就相当于 test = timer(test)