python学习之-装饰器

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整个参数

猜你喜欢

转载自www.cnblogs.com/shizhengquan/p/9977495.html