简介:统计代码运行时间无外乎设置开始时间 - 运行程序 - 获取结束时间 - 统计差额,另外需要考虑多次执行求平均值,这样才更准确。
常规统计代码运行时间的三种方法:缺点是统计单次,灵活度低,统计粗糙。
1、使用time模块设置开始时间 - 运行程序 - 获取结束时间 - 统计差额
2、使用datetime模块设置开始时间 - 运行程序 - 获取结束时间 - 统计差额
3、常规方法的升级版 - 装饰器
所以正常情况下更推荐使用timeit模块进行统计小段代码的运行时间,更有助于得到精确的时间,以检查代码的性能。
案例源码:
# -*- coding: utf-8 -*-
# time: 2022/6/12 0:12
# file: spend_time.py
# 公众号: 玩转测试开发
import time
import datetime
loop = 1000000
def f1():
for i in range(loop):
pass
print("f1 run.")
def decorator(f):
def inner():
start = time.time()
f()
end = time.time()
print(f"f2 spend:{end-start}")
return inner
@decorator
def f2():
for i in range(loop):
pass
print("f2 run.")
if __name__ == '__main__':
# 常规方法一:使用time模块设置开始时间 - 运行程序 - 获取结束时间 - 统计差额
start = time.time()
f1()
end = time.time()
print(f"f1 case1 spend:{end-start}")
# 常规方法二:使用datetime模块设置开始时间 - 运行程序 - 获取结束时间 - 统计差额
start2 = datetime.datetime.now()
f1()
end2 = datetime.datetime.now()
print(f"f1 case2 spend:{end2-start2}")
# 常规方法三:常规方法的升级版 - 装饰器
f2()
timeit语法:
timeit.timeit(stmt, setup,timer, number)
参数说明:一般而言number的默认值为100万过大,建议设置小一点。
stmt:这将采用您要测量其执行时间的代码。默认值为“pass”。
setup:这将包含需要在stmt之前执行的设置详细信息。默认值为“ pass”。
timer:它将具有计时器值,timeit()已经设置了默认值,我们可以忽略它。
number:stmt将按照此处给出的编号执行。默认值为1000000。
timeit案例:
1、单行代码:
timeit('a = 50 ** 10000', number=number)
2、多行代码案例:
timeit('a=10;b=10;result=[a+b for i in range(1000)]', number=number)
3、函数代码案例:
timeit('func1()', 'from __main__ import func1', number=number)
timeit案例源码:
# -*- coding: utf-8 -*-
# time: 2022/6/11 21:17
# file: better_code.py
# 公众号: 玩转测试开发
from timeit import timeit
loop = 1000
def func1():
s = 0
for i in range(loop):
s += i
return s
def func2():
s = 0
for i in range(loop):
s = s + i
return s
def func3():
return sum([i for i in range(loop)])
def func4():
return sum(range(loop))
if __name__ == '__main__':
number = 5000
# 单行代码:直接使用。
print("单行代码:", timeit('a = 50 ** 10000', number=number))
# 多行代码:使用分号
print("多行代码:", timeit('a=10;b=10;result=[a+b for i in range(1000)]', number=number))
# timeit(函数名_字符串,运行环境_字符串,number=运行次数)
t1 = timeit('func1()', 'from __main__ import func1', number=number)
t2 = timeit('func2()', 'from __main__ import func2', number=number)
t3 = timeit('func3()', 'from __main__ import func3', number=number)
t4 = timeit('func4()', 'from __main__ import func4', number=number)
print("统计函数运行时间对比:")
print(t1)
print(t2)
print(t3)
print(t4)
微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!