python装饰器详解
2018-12-06 07:35:27来源:博客园 阅读 ()
# -*- coding:utf-8 -*- import time #作者: baikai #创建时间: 2018/12/4 13:22 #文件: demo.py #IDE: PyCharm #装饰器 #1:不能修改被装饰的函数的源代码 #2:不能够改变被装饰函数的调用方式 #应用场景:插入日志、性能测试、处理事务 #需求测试一个函数大概运行多少时间 def f(): print('I am f') time.sleep(2) def new_f(): start_time=time.time() f() end_time=time.time() print('耗时:%s'%(end_time-start_time)) if __name__ == '__main__': new_f()
#理解装饰器之前,还需要理解3句话 #1.函数即变量 #函数也可以作为参数,函数也可以作为返回值 #2.高阶函数 #以函数作为参数,或者返回值是函数的函数 #3.函数嵌套 #函数里面定义函数 #高阶函数+嵌套函数=装饰器 def my_time(func): def wrapper(): start_time=time.time() func() end_time=time.time() print('%s耗时%s秒' % (func.__name__,(end_time-start_time))) #不加()是返回该函数,加()是返回该函数的结果 return wrapper def f(): print('I am f') time.sleep(2) n=my_time(f) #n等于wrapper f=n f()
# -*- coding:utf-8 -*- import time #作者: baikai #创建时间: 2018/12/4 13:22 #文件: demo.py #IDE: PyCharm #装饰器 #1:不能修改被装饰的函数的源代码 #2:不能够改变被装饰函数的调用方式 #应用场景:插入日志、性能测试、处理事务 #需求测试一个函数大概运行多少时间 #定义一个装饰器 def my_time(func): def wrapper(): start_time=time.time() # func就是f()这个函数,而f()相当于wrapper()这个函数 #所以func()最终就是等于执行wrapper()这个函数 func() end_time=time.time() print('%s耗时%s秒' % (func.__name__,(end_time-start_time))) #不加()是返回该函数,加()是返回该函数的结果 return wrapper @my_time #等于f=my_time(f),执行my_time(f),返回了wrapper这个函数 def f(): print('I am f') time.sleep(2) f() #执行f()就相当于执行wrapper()这个函数
执行结果如下:
I am f
f耗时2.0秒
Process finished with exit code 0
有参装饰器
# -*- coding:utf-8 -*- import time #作者: baikai #创建时间: 2018/12/4 13:22 #文件: demo.py #IDE: PyCharm #装饰器 #1:不能修改被装饰的函数的源代码 #2:不能够改变被装饰函数的调用方式 #应用场景:插入日志、性能测试、处理事务 #需求测试一个函数大概运行多少时间 #定义一个有参装饰器 def my_time(func): def wrapper(*args,**kwargs): start_time=time.time() # func就是f()这个函数,而f()相当于wrapper()这个函数 #所以func()最终就是等于执行wrapper()这个函数 func(*args,**kwargs) end_time=time.time() print('%s耗时%s秒' % (func.__name__,(end_time-start_time))) #不加()是返回该函数,加()是返回该函数的结果 return wrapper @my_time #等于f=my_time(f),执行my_time(f),返回了wrapper这个函数 def f(): print('I am f') time.sleep(2) #有参函数 @my_time def f1(name): print(name) f() #执行f()就相当于执行wrapper()这个函数 f1('baikai')
这样有参函数和无参函数都可以被装饰了
运行结果如下:
I am f
f耗时2.0秒
baikai
f1耗时0.0秒
Process finished with exit code 0
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Python循环与判断
下一篇:2.Twisted学习
- 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