python装饰器
来源:互联网 发布:平井一夫的微笑 知乎 编辑:程序博客网 时间:2024/06/03 16:58
一. 实现装饰器知识储备:
1. 函数即“变量”
2. 高阶函数
把一个函数名当做实参传给另一个函数(实现了在不修改被装饰函数源码的情况下为其添加功能)
返回值中包含函数名(实现了不修改函数的调用方式)
3. 嵌套函数
二 .装饰器定义:
本质就是函数(装饰其他函数)就是为其他函数添加附加功能的。
三. 原则:
1.不能修改被装饰的函数的源代码。
2.不能修改被装饰函数的调用方式。
例如:下面这段代码在通过写calcTime函数,在seek()函数的原有功能(即没有改变seek()函数内的任何代码)上添加了计算执行时间的新功能,但是调用方式发生了变化,因此还需优化才能达到装饰器的目标:
import timedef calcTime(func): startTime = time.time() func() endTime = time.time() print("this progress consume %s"%(endTime-startTime))def seek(): time.sleep(2.2) print("i am seeking")calcTime(seek)
优化:
import timedef calcTime(func): def deco(): startTime = time.time() func() endTime = time.time() print("this progress consume %s"%(endTime-startTime)) return decodef seek(): time.sleep(2.2) print("i am seeking")seek = calcTime(seek)#通过执行calcTime函数返回添加新功能函数的地址即decoseek()#调用新添加功能的函数deco
再优化:
Python里提供了语法糖,只需在被装饰的函数上添加@装饰函数名字即可
import timedef calcTime(func): def deco(): startTime = time.time() func() endTime = time.time() print("this progress consume %s"%(endTime-startTime)) return deco@calcTimedef seek(): time.sleep(2.2) print("i am seeking")# seek = calcTime(seek) 不用这行代码了seek()
四. 总结:
Python装饰器很小巧,设计的很美。
Python装饰器在给已经上线的功能基础上添加新的功能非常常用,因为你不可能让开发者再次重写正在线上运行的函数。
阅读全文
1 0
- python装饰器装饰类
- [python]python装饰器
- Python装饰器学习
- Python装饰器
- python 装饰器
- Python装饰器
- python 装饰器 应用
- python 装饰器2
- Python装饰器学习
- python装饰器
- python装饰器
- python 装饰器入门
- python装饰器
- python装饰器
- python 装饰器'@'
- python装饰器
- Python装饰器详解
- python 装饰器
- block,inline和inline-block概念和区别
- linux任务自动化部署与维护脚本
- Vue项目兼容IE浏览器
- JavaFX之setBackground()设置组件背景颜色
- XYNUOJ 1094 杨辉三角
- python装饰器
- Maven相关
- 常见的数学知识
- JSP页面的九个内置(隐式)对象
- frmentone
- MySQL查询语句
- rest frame work 教程
- MyEclipse html preview 中文乱码解决方法
- selenium无法定位126邮箱