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

timeit.timeit()与Timer.autorange()计时结果差异问题求助

问题原因:混淆总时间与单次时间,单位换算错误

你看到的"数量级差异"其实是对输出结果的含义误解导致的,核心问题出在这两点:

  1. timeit.timeit()的返回值是总时间:你设置了number=100,所以输出的0.0025681090000944096是100次运行的总耗时(秒),单次运行时间应该是0.002568... / 100 = 0.00002568秒,换算成毫秒是0.02568毫秒。

  2. autorange的结果是单次时间:你计算的per_run *1000是单次运行的毫秒数(0.01439毫秒),和上面的单次时间对比,差异仅在2倍以内,属于计时的正常误差,并非数量级差异。

额外影响因素

除了误解结果含义,还有两个细节会导致结果偏差:

  • 运行次数的合理性:timeit.timeit用固定100次运行,次数太少会放大计时误差;而autorange会自动选择足够的运行次数(默认让总耗时至少0.2秒),结果更稳定准确。
  • 命名空间不一致:你的timeit.timeit通过setup在独立命名空间定义f,而autorange用globals()调用全局的f。虽然两个f代码一致,但统一命名空间能让对比更严谨,比如修改timeit调用为:
    t = timeit.timeit("f()", globals=globals(), number=100)
    

修正后的对比代码

import timeit

def f():
    x = "-".join(str(n) for n in range(100))

# timeit计算单次时间
total_time = timeit.timeit("f()", globals=globals(), number=1000)
per_run_time = total_time / 1000
print(f"timeit单次耗时(秒):{per_run_time:.8f},毫秒:{per_run_time*1000:.6f}")

# autorange计算单次时间
run_count, total_timing = timeit.Timer(stmt='f()', globals=globals()).autorange()
ar_per_run = total_timing / run_count
print(f"autorange单次耗时(秒):{ar_per_run:.8f},毫秒:{ar_per_run*1000:.6f}")

运行后两者的单次耗时会非常接近,误差在合理范围内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:47:55