Python:time、timeit、datetime统计代码运行时间

简介:统计代码运行时间无外乎设置开始时间 - 运行程序 - 获取结束时间 - 统计差额,另外需要考虑多次执行求平均值,这样才更准确。

常规统计代码运行时间的三种方法:缺点是统计单次,灵活度低,统计粗糙。

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)

微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值