python 添加统计运行时间的功能[装饰器]
python 添加统计运行时间的功能[装饰器]
脚本一
没有修改被装饰对象的调用方式,但修改了源代码
#!/bin/python3 # -*- coding: utf-8 -*- import time def index(x,y): start=time.time() print('index %s %s' %(x,y)) stop=time.time() print(stop - start) index(11,22) # python3 time.py index 11 22 6.0558319091796875e-05
脚本二
解决了方案二代码冗余问题,但是带来一个新问题,即函数的调用方式改变了
#!/bin/python3 # -*- coding: utf-8 -*- import time def index(x,y): time.sleep(3) print('index %s %s' %(x,y)) start=time.time() index(11,22) stop=time.time() print(stop - start) start=time.time() #代码冗余,重复代码过多 index(66,88) stop=time.time() print(stop - start) # python3 time1.py index 11 22 3.0020477771759033 index 66 88 3.0020477771759033
脚本三
解决了方案二代码冗余问题,但是带来一个新问题,即函数的调用方式改变了
#!/bin/python3 # -*- coding: utf-8 -*- import time def index(x,y): time.sleep(3) print('index %s %s' %(x,y)) def wrapper (): start=time.time() index(11,22) stop=time.time() print(stop - start) wrapper () # python3 time2.py index 11 22 3.0029959678649902
脚本四
装饰器实现
# cat 1.py #!/bin/python3 # -*- coding: utf-8 -*- import time def index(x,y,z): time.sleep(6) print('index %s %s %s' %(x,y,z)) def home(name): #新增功能代码 time.sleep(6) print('welcome %s to home' %name) return 666 def outter(func): def wrapper (*args,**kwargs): start=time.time() func(*args,**kwargs) stop=time.time() print(stop - start) return wrapper index=outter(index) home=outter(home) #调用新功能。偷梁换柱:home这个名字指向的wrapper函数的内存地址 h=index(22,66,88) print('返回值:',h) res=home('wei') #res=wrapper('wei') l=home(name='wei') print('返回值:',res) print('返回值:',l) # python3 1.py index 22 66 88 6.006062984466553 返回值: None welcome wei to home 6.005392074584961 welcome wei to home 6.001788139343262 返回值: None 返回值: None
脚本五
将wrapper做的像wrapper一样
# cat 1.py #!/bin/python3 # -*- coding: utf-8 -*- import time def index(x,y,z): time.sleep(6) print('index %s %s %s' %(x,y,z)) def home(name): #新增功能代码 time.sleep(6) print('welcome %s to home' %name) return 666 def outter(func): def wrapper (*args,**kwargs): start=time.time() res=func(*args,**kwargs) stop=time.time() print(stop - start) return res return wrapper index=outter(index) home=outter(home) h=index(22,66,88) print('返回值:',h) res=home('wei') l=home(name='wei') print('返回值:',res) print('返回值:',l) # python3 1.py index 22 66 88 6.004750490188599 返回值: None welcome wei to home 6.0060179233551025 welcome wei to home 6.005538702011108 返回值: 666 返回值: 666
脚本六
使用语法糖@优化
#!/bin/python3 # -*- coding: utf-8 -*- import time def timmer(func): #装饰器 def wrapper (*args,**kwargs): start=time.time() res=func(*args,**kwargs) stop=time.time() print(stop - start) return res return wrapper @timmer #在被装饰对象的正上方的单独一行,写@装饰器名字,相当于index=outter(index) def index(x,y,z): time.sleep(6) print('index %s %s %s' %(x,y,z)) @timmer #相当于home=outter(home) def home(name): #新增功能代码 time.sleep(6) print('welcome %s to home' %name) return 666 index(x=1,y=2,z=3) home('wei') # python3 2.py index 1 2 3 6.005947828292847 welcome wei to home 6.0057384967803955
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)