You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python性能测试:timeit与default_timer的差异及准确性疑问

问题:timeit()与default_timer的测量结果差异原因及准确性对比

我是Python新手,正在寻找测试代码执行速度并对比不同实现的方法。我发现timeit库很实用,但对timeit()函数与default_timer的输出差异感到困惑。

示例1使用timeit测试maxWealth函数,输出为0.41396119981072843:

from timeit import timeit


def maxWealth(accounts):
    m = 0
    for account in accounts:
        tot = sum(account)
        if tot > m:
            m = tot
    return m


list1 = [[1, 2, 3, 5], [1, 2, 45, 6]]
print(timeit(lambda: maxWealth(list1)))

示例2使用default_timer测试,输出为6.400048732757568e-06(即0.0000064秒):

from timeit import default_timer as timer


def maxWealth(accounts):
    m = 0
    for account in accounts:
        tot = sum(account)
        if tot > m:
            m = tot
    return m


list1 = [[1, 2, 3, 5], [1, 2, 45, 6]]
start = timer()
result = maxWealth(list1)
stop = timer()
print(stop-start)

我发现timeit的测量结果更稳定,但二者数值差异极大。根据文档,两者都使用Timer实例,为何会有此差异?哪种方法更准确?


解答

核心差异在于执行次数:

  • timeit()函数默认会重复执行目标代码100万次(可通过number参数修改),你看到的0.41秒是这100万次执行的总耗时。
  • 而你的default_timer代码只执行了1次函数,得到的是单次执行的耗时。

这就是数值差距巨大的原因,并非两者的计时精度有本质区别——timeit底层确实会用到default_timer来计时,但它会自动重复多次执行,再返回总耗时(或平均耗时,取决于是否使用repeat参数)。

关于准确性:

  • 对于快速执行的代码(比如你的maxWealth,单次耗时仅微秒级),单次测量的误差会非常大——操作系统的进程调度、后台任务都会干扰结果,所以timeit的多次重复测量结果更稳定、更可信。
  • 若需要单次执行的真实耗时,default_timer是合适的,但建议多次测量取平均值来减少误差;若要对比不同代码实现的性能,timeit是更省心的选择,它会自动处理重复执行、减少环境干扰,还能避免一些常见计时陷阱(比如函数定义开销、垃圾回收影响)。

总结:

  • 测单次执行耗时:用default_timer,多测几次取平均。
  • 对比代码性能/找最优实现:用timeit,重复执行机制能给出更可靠的对比结果。

内容的提问来源于stack exchange,提问作者Simone Gheller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:42:53