引用https://www.cnblogs.com/jixuege-1/p/5779464.html
从字面意思来看,器代表函数的意思,可以说,装饰器本身就是函数,都是用def语法来定义的。
装饰器:
定义:本质是函数,(装饰其他函数)
为其他函数添加附加功能。
①先来看个简单的,在没学函数之前,我想给定义的函数打个日志,写法如下:
1 def test1(): 2 pass 3 print('logging') 4 5 def test2(): 6 pass 7 print('logging') 8 #调用 9 test1() 10 test2()
②接下来学了函数,我就把打日志定义成一个函数
def logger(): print('logging') def test1(): pass logger() def test2(): pass logger() #调用 test1() test2()
假设我写的函数已经上线运行了,某一天,我有个需求,在这个里面新增一个功能,那怎么去做这个事?
最简单的就是:挨个找到100个函数,加上去。但是问题是程序已经运行了,我刚才操作是修改我程序的源代码,会有风险发生。
所以说,我要新增一个功能,不能够修改函数的源代码,函数一旦写好了,原则上不能动源代码了。
所以就有了下面的原则:
- 不能修改被装饰函数的源代码。
- 不能修改被装饰的函数的调用方式。装饰器对于被装饰函数是完全透明的。他没有动我的源代码,我该怎么调用运行就怎么运行。