Python 装饰器
2019-01-03 09:58:12来源:博客园 阅读 ()
首先
需求来了
有如下几个封装好的函数供调用:
现在需要在每个函数执行前进行日志记录:
第一个方案
修改每个函数,添加日志记录的代码
但这样显然不太好,存在大量的重复代码,可以将重复代码封装为一个方法
第二个方案
这样的确是比第一个方案好多了,但是不符合开闭原则,即现有的代码不要去修改,而在基础的功能上进行二次开发
第三个方案
这样的确很好,但是在调用的时候太麻烦了,而且函数名字也变了,以前写好的代码全部都要修改,想办法让函数名不变就好了
第四个方案
这样就又好点了,在增加功能而不修改代码的前提下,也保证了函数名不变
这就是装饰器的功能了,装饰器和上边的代码实现的功能相同,只不过用了语法糖
使用装饰器的方案
装饰器原理
上述代码在执行@verify时,进行了如下操作:
执行verify函数 ,并将 @verify 下面的函数作为verify函数的参数
即@verify 等价于 verify(f1) , 其内部执行代码如下:
f1 = verify(f1)
如此便为装饰器
小小装饰器
输出结果:
装饰器的常用功能
- 引入日志
- 函数执行时间统计
- 执行函数前预备处理
- 执行函数后清理功能
- 权限校验等场景
- 缓存
装饰器实例
1.无参数的函数
2.被装饰的函数有参数
3.被装饰的函数有不定长参数
4.装饰器中的return
执行结果
如果修改装饰器为 return func(),则运行结果:
所以,一般情况下为了让装饰器更通用,可以有return
5.装饰器带参数,在原有装饰器的基础上,设置外部变量
运行结果为:
可以理解为:
foo()==timefun_arg("itcast")(foo)()
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:用Python解中考数学规律题
下一篇:python学习--day01
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash