什么是装饰器python
开放封闭原则闭包
软件一旦上线后,就应该遵循开放封闭原则。对修改源代码是粉笔的,对功能的拓展是开放的也就是说咱们必须找到一种解决方案:可以在不修改一个功能源代码以及调用方式的前提下,为其加上新功能app
总结函数
原则以下对象
1.不修改源代码blog
2.不修改调用方式内存
目的class
在1和2元则的基础上拓展新功能import
什么是装饰器基础
装饰器即在不修改被装饰对象源代码与调用方式的前提下,为装饰器对象添加新功能
装饰器与被装饰的对象都可以是任意调用的对象
装饰器=>函数
被装饰的对象=>函数
语法糖
被装饰函数的正上方,单独一行 @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(一、 # print('welcome to index page') # return 123 # @timer # def home(name): # time.sleep(2) # print('welcome %s to index page' %name) # # index() # home('egon')