0

0

Python timeit 模块的使用技巧

冷漠man

冷漠man

发布时间:2026-01-30 20:28:03

|

145人浏览过

|

来源于php中文网

原创

单次测量用 timeit.timeit(),但易受系统负载干扰;评估稳定性或排除异常值必须用 timeit.repeat(),它默认执行3组、每组1000000次,返回列表可取min()最可靠。

python timeit 模块的使用技巧

timeit.timeit() 和 timeit.repeat() 怎么选

单次测量用 timeit.timeit(),但结果容易受瞬时系统负载干扰;想评估稳定性或排除异常值,必须用 timeit.repeat() —— 它默认执行 3 组,每组调用 number 次(默认 1000000),返回列表,你取 min() 最可靠。

常见错误是直接信 timeit.timeit() 的一次结果,尤其在笔记本或虚拟机上,CPU 频率波动、后台进程都可能让误差超 20%。

  • repeat=5, number=100000 比默认更稳妥,适合中等耗时代码
  • 如果函数执行很快(number 到 10⁶ 或更高,避免计时器本身开销占比过大
  • repeat() 后别取平均值,取 min() —— 这最接近“纯函数执行时间”,避开上下文干扰

setup 参数写错会导致 benchmark 失效

setup 不只是导入语句,它决定测试环境是否干净。漏掉变量预定义、错用字符串拼接、忘记 import,都会让 timeitNameError 或测到无关开销。

例如测 list.append(),如果在 stmt 里每次新建 list:stmt='l = []; l.append(1)',实际测的是创建 list + append,不是 append 本身。

立即学习Python免费学习笔记(深入)”;

95Shop仿醉品商城
95Shop仿醉品商城

95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we

下载
  • 正确做法:在 setup 中初始化数据,stmt 只写待测操作,如 setup='l = []'stmt='l.append(1)'
  • 多行 setup?用三引号或 ; 连接,但注意换行符不被支持,setup='import math; x = 123' 是安全的
  • 避免在 setup 中执行耗时操作(如读文件、生成大列表),否则会污染计时结果

命令行调用 timeit 时路径和作用域容易出错

python -m timeit 最方便,但要注意当前工作目录和 Python 模块搜索路径 —— 它不自动包含当前目录,-m 模式下也无法直接 import 本地 .py 文件。

典型报错:ModuleNotFoundError: No module named 'myutils',哪怕 myutils.py 就在当前文件夹。

  • 解决方法一:加 -p .(Python 3.11+)或临时改 PYTHONPATH=.
  • 解决方法二:把待测代码写成字符串传入,用 -s 写 setup,如 python -m timeit -s "from math import sqrt" "sqrt(144)"
  • 别在命令行里用相对路径导入模块;也别依赖 __file__os.getcwd() —— timeit 的执行上下文不保证与你预期一致

timeit.Timer 实例比函数调用更灵活,但要手动管理命名空间

当你需要反复测多个 stmt、共享同一 setup,或想控制 globals/locals 时,timeit.Timer 是唯一选择。但它不会自动帮你隔离变量,locals 冲突或 globals 覆盖很常见。

比如你在 globals() 里传了 {'x': 10},又在 stmt 里写 x += 1,就会报 UnboundLocalError —— 因为 Python 认为 x 是局部变量,但首次引用前未赋值。

  • 安全做法:用独立字典传 globals,且确保所有变量都在里面初始化,如 g = {'x': 10}; t = timeit.Timer('x += 1', globals=g)
  • 避免混用 globalslocals;优先只用 globalslocals 在闭包或动态作用域下行为难预测
  • 如果 stmt 依赖类或函数定义,全写进 setup 字符串里,别指望从外部 globals 自动带入
真正影响结果的,往往不是算法本身,而是 setup 是否复位、number 是否足够大、以及你有没有在 min 结果里忽略掉那一次 GC 触发的抖动。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

12

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

4

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

18

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号