装饰器基础知识<须有一定函数基础>

1:装饰器本质是函数,功能是装饰其他函数,即为其它函数添加附加功能。

2:装饰器需要遵循的原则:(1).不能修改被装饰函数的源代码、(2).不能修改被装饰函数的调用方式、即总结起来装饰器对被装饰的函数是完全透明的。

3.特定场景:假如现在有10个函数,每个函数都有自己要完成的功能,调用的时候怎么调用呢?即test1()test2()….test10()很简单,现在有一个需求:将test1test10增加一个新的功能,新功能为增加纪录日志的功能,怎么做呢,只能一个一个函数将纪录日志的功能加进去,学习了函数之后貌似比较高级了,怎么做呢,可以这样做,定义一个打印日志的函数,然后在test1test10中调用这个函数即可,避免了写过多重复代码。

4.假如现在写了一款APP,APP包含100个函数,该APP已经上线运行了,某一天产品经理告诉你,针对这个APP需要新增一个功能,作为一个开发人员应该如何去做呢?挨个找到100个函数,将新功能依次加上吗?问题是程序已经正常运行,这样的操作是在修改程序源代码,意味着会有很高的风险发生,不知道会出现什么问题。即要新增功能,不能修改函数的源代码(原则上不能动源代码),这样便引出装饰器原则(1):不能修改被装饰函数的源代码、(2):不能修改被装饰的函数的调用方式,总结为一点即装饰器对被装饰的函数是完全透明的,何为完全透明?原函数感知不到装饰器的存在(没有动源代码)

5:一段可以统计函数运行时间的装饰器

# Author:Ju BO
import time
def timmer(func):
    def warpper(*args,**kwargs):
        start_time=time.time()
        func()
        stop_time=time.time()
        print("the func run time is %s"%(stop_time-start_time))
    return warpper
@timmer
def test1():
    time.sleep(3)
    print("in the test1")
test1()

6:要实现这样一个装饰器的功能需要哪些知识呢?

(1):函数即变量

(2):高阶函数

(3):嵌套函数

最终高阶函数+嵌套函数=装饰器

由于装饰器比较复杂,暂时写到这里,后续所有内容均会补上,需要跟读贴温馨提醒关注一下。

猜你喜欢

转载自www.cnblogs.com/jb9527/p/10301436.html
今日推荐