装饰器详解

引用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个函数,加上去。但是问题是程序已经运行了,我刚才操作是修改我程序的源代码,会有风险发生。

所以说,我要新增一个功能,不能够修改函数的源代码,函数一旦写好了,原则上不能动源代码了。

所以就有了下面的原则:

  • 不能修改被装饰函数的源代码。
  • 不能修改被装饰的函数的调用方式。装饰器对于被装饰函数是完全透明的。他没有动我的源代码,我该怎么调用运行就怎么运行。

 

posted @ 2019-01-13 08:08  joneylulu  阅读(125)  评论(0编辑  收藏  举报