day11 装饰器

什么是装饰器

开放封闭原则

软件一旦上线后,就应该遵循开放封闭原则。对修改源代码是粉笔的,对功能的拓展是开放的也就是说我们必须找到一种解决方案:能够在不修改一个功能源代码以及调用方式的前提下,为其加上新功能

总结

原则如下

1.不修改源代码

2.不修改调用方式

目的

在1和2元则的基础上拓展新功能

什么是装饰器

装饰器即在不修改被装饰对象源代码与调用方式的前提下,为装饰器对象添加新功能

装饰器与被装饰的对象均可以是任意调用的对象

装饰器=>函数

被装饰的对象=>函数

语法糖

被装饰函数的正上方,单独一行
        @deco1
        def foo():
            pass
        foo=deco1()
而且语法糖的先后顺序也会影响代码执行结果

# import time  引入time库
#定义了一个闭包函数(最高嵌套3层) # def timer(func):
#   函数内部包含一个函数,且引用函数内部的变量即闭包函数,闭包函数从自身所在名称空间出发寻找变量,找不到就跳出本层找,直到找到内置名称空间 # def wrapper(*args,**kwargs):
#          *args和**kwargs保证了能接收任何参数
#     代码块 # start_time = time.time() # res=func(*args,**kwargs) #调用最原始的index
#           上面接收什么,这里就会接收什么 # stop_time = time.time() # print('run time %s' % (stop_time - start_time)) # return res #这个是干嘛的,只知道是返回最原始的index # return wrapper #返回的是wrapper函数名对应的内存地址,可以加()直接调用 # # @timer #语法糖,相当于index=timer(index) # def index(): # time.sleep(1、 # print('welcome to index page') # return 123 # @timer # def home(name): # time.sleep(2) # print('welcome %s to index page' %name) # # index() # home('egon')

  



原文地址:https://www.cnblogs.com/shanjinghao/p/8669829.html