码迷,mamicode.com
首页 > 编程语言 > 详细

python学习之-装饰器

时间:2018-11-18 13:10:58      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:bsp   内存地址   源代码   dex   stop   变化   升级   sleep   装饰器   

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

python学习之-装饰器

标签:bsp   内存地址   源代码   dex   stop   变化   升级   sleep   装饰器   

原文地址:https://www.cnblogs.com/shizhengquan/p/9977495.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!