标签:执行 time模块 wrap wrapper 方式 test rgs rap return
定义:是在不改变函数的调用方式,还能为此函数前后添加功能
一、写一个测试代码时间的函数
import time#导入time模块是为了模拟函数运行时间
def inner():
start=time.time()
time.sleep(1)
for i in range(100):
print(i)
end=time.time()
print(end)
inner()
二、当有多个封装成函数的代码需要测试执行时间时,一个一个重新写,太麻烦了
此时我们可以通过test()函数来传入函数名,来测试每个函数的执行时间,
我们称test()为装饰器函数,func()为被装饰函数
import time
def func():
time.sleep(1)
for i in range(200):
print(i)
def test(f):
def inner():
start=time.time()
f()
end=time.time()
print(end-start)
return inner
func=test(func)
func()
三、语法糖
import time
def test(f):
def inner():
start=time.time()
f()
end=time.time()
print(end-start)
return inner
@test#语法糖,相当于func=test(func)
def func():
time.sleep(1)
for i in range(100):
print(i)
func()
import time
def test(f):
def inner():
start=time.time()
ret=f()
end=time.time()
print(end-start)
return ret
return inner
@test
def func():
time.sleep(1)
print(‘123‘)
return ‘close‘
ret=func()
print(ret)
import time
def test():
def inner():
start=time.time()
ret=func(*args,**kwargs)
end=time.time()
print(end-start)
return ret
return inner
@test
def func(a,b):
time.sleep(1)
print(‘in func() get:%s,%s‘%(a,b))
func(‘参数1‘,‘参数2‘)
def wrapper(func):
def inner(*args,**kwargs):
‘‘‘执行函数前要执行的功能‘‘‘
ret=func(*args,**kwargs)
‘‘‘执行函数后要执行的功能‘‘‘
return ret
return inner
#这样通过修改装饰器函数前面的flag的值,就可以控制下面的函数是否都使用装饰器
flag=True
def timmer_out(flag):
def timmer(func):
def inner(*args,**kwargs):
if flag:
print(‘执行函数前要执行的功能‘)
ret=func(*args,**kwargs)
print(‘执行函数后要执行的功能‘)
return ret
else:
ret=func(*args,**kwargs)
return ret
return inner
return timmer
@timmer_out(flag)
def func1():
print(‘我是一个登陆函数‘)
return ‘我是登陆函数的返回值‘
ret=func1()
print(ret)
import time
@timmer_out
def func2(flag):
time.sleep(1)
print(‘我是一个注册函数‘)
return ‘我是注册函数的返回值‘
ret1=func2()
print(func2)
标签:执行 time模块 wrap wrapper 方式 test rgs rap return
原文地址:https://www.cnblogs.com/peng-blogs/p/14583884.html