场景
计算函数的运行时间
解决方式
栗子
计算10000000以内的和
code
from time import time, sleep
# 计算10000000以内的和
def getRunTime():
start = time()
sum = 0
for i in range(1, 10000001):
sum += i
print("sum : ", sum)
end = time()
print("time use : ", end - start)
if __name__ == '__main__':
getRunTime()
结果
sum : 50000005000000
time use : 0.28477931022644043
这是单个函数的运行时长计算,如果有很多函数都要计算,大致的形式就变成了如下形式:
def fun1():
start = time()
dosomthing1...
end = time()
print("time use : ", end - start)
def fun2():
start = time()
dosomthing2...
end = time()
print("time use : ", end - start)
def fun3():
start = time()
dosomthing3...
end = time()
print("time use : ", end - start)
就是在每个函数中都加入start
和end
的计算元素,这样无疑会让代码显得比较冗余,代码质量也相对较弱;为了解决这个问题我们就引入装饰器来简化代码,说到装饰器不得不提到闭包,在我看来,闭包是实现装饰器的根基;
闭包
特性:
两层函数的嵌套
内层函数引入外层函数的变量;
外层函数返回值是内层函数;
计时器demo
code
def timer(func):
def a():
s = time.time()
func()
e = time.time()
# print('---', e - s)
return e - s
return a
使用装饰器
@timer
def b():
time.sleep(3)
if __name__ == '__main__':
print(b())
结果
time use : 3.008854627609253
这样就通过装饰器实现了计时功能;
再回过头来看开始我们做的10000000以内数据求和结合装饰器实现时间计算,具体code:
import time
def timer(func):
def a():
s = time.time()
func()
e = time.time()
return e - s
return a
@timer
# 计算10000000以内的和
def getRunTime():
sum = 0
for i in range(1, 10000001):
sum += i
print("sum : ", sum)
if __name__ == '__main__':
print("time use : ", getRunTime())
结果
sum : 50000005000000
time use : 0.2682473659515381
欢迎关注微信公众号、blibli频道:魔都吴所谓,获取更多资源分享与行业交流的信息~~~