1. 什么是装饰器
装饰器就是用来为被装饰的对象新增功能的工具/函数,被装饰的对象可以是任意可调用的对象,装饰器本身也可以是任意可调用的对象
2. 为何要用装饰器
开放封闭原则:对修改封闭,对扩展开放
装饰器需要遵循的原则:
1. 不能修改被装饰对象的源代码
2. 不能修改被装饰对象的调用方式
PS:装饰器的目标:就是要在遵循原则1和2的前提下,为被装饰对象新增功能
3. 如何实现装饰器
import time
def index(): #这是被装饰对象
time.sleep(1)
print(‘welcome to index page‘)
def timmer(func): # func=最原始那个index的内存地址 #这个就是装饰器格式
def wrapper():
start=time.time()
func()
stop=time.time()
print(‘run time is %s‘ %(stop - start))
return wrapper
index=timmer(index) #index=wrapper(index的内存地址),这两个index不一样,前面的是一个新的名称空间,后面的index做了一个转换 #这一步就是用来包装,让使用者感觉没有变化但是后台却对功能进行了一个升级
index()
PS:为什么要在嵌套函数的外面再加一层函数,因为如果不加这层函数,则最后包装调用时候无法传入index整个参数
原文地址:https://www.cnblogs.com/shizhengquan/p/9977495.html