刚开始看Python核心编程的时候,刚接触到装饰器的时候,有点懵逼了,我们为什么需要装饰器,装饰器的语法我们以前都没有接触过。知道今天才慢慢开始搞懂装饰器,装饰器的本质实际上就是函数。
为什么需要装饰器?
装饰器就是我们在对原有的函数功能上不能满足我们现在的需求,我们希望在装饰器的基础之上,让函数的新功能在原来函数之前做点什么,在原来函数之后做点什么。
装饰器的原理
装饰器的语法,通过@符号函数名 自定义函数
实际上装饰器做了两件事情
1.执行装饰器函数,将装饰器下面的函数作为参数传递进去
2.将装饰器函数的返回值重新赋值给原函数(我们知道在函数有重定义的函数时,Python解释器从上往下执行,下面的函数会覆盖上面的函数)
例子
1.执行outer函数,将f函数作为参数传递进去,即func和f函数都只想同一个函数
2.将outer函数的返回值赋值给f,即f为inner新函数
此时,在执行f函数即相当于执行inner函数,就像发生了函数的重写
如果原来的函数带参数,而我们又想我们的装饰器能够应用于不同的所有函数,那么我们可以应用动态参数的原理来实现装饰器
对应代码
我们如果有新的需求,一部分添加部分功能,还有一部分在部分功能基础之上再添加部分功能,那么我们这时候需要嵌套使用装饰器
当涉及到多个装饰器嵌套的时候,我们可以首先将最里层的装饰器替换为装饰器函数的内部的inner函数,然后一层一层嵌套即可