Python timeit():精准测量代码执行时间与实战示例
Python timeit() – 测量执行时间的实用指南
什么是 Python timeit()?
Python timeit() 是内置模块,旨在高精度测量小代码片段的执行时间。默认运行语句一百万次并报告最快运行时间,帮助对比不同实现的性能。
语法
timeit.timeit(stmt, setup, timer, number)
参数
- stmt – 要计时的代码。默认
pass。 - setup –
stmt运行前执行一次的代码。默认pass。 - timer – 可选计时器函数。模块提供合适的默认值。
- number –
stmt执行次数。默认 1,000,000。
先导入模块:
import timeit
示例 1 – 计时简单表达式
# 测试基本算术运算
import timeit
print(timeit.timeit("output = 10*5"))
典型输出:
0.06127880399999999
显示一百万次运行中最快一次的耗时(秒)。
计时多行代码
timeit 支持多行代码,用分号分隔语句或传入三引号字符串。
使用分号
import timeit
print("The time taken is ", timeit.timeit(stmt="a=10;b=10;sum=a+b"))
输出:
The time taken is 0.137031482
使用三引号字符串
import timeit
import_module = "import random"
testcode = '''
def test():
return random.randint(10, 100)
'''
print(timeit.repeat(stmt=testcode, setup=import_module))
输出:
C:\pythontest>python testtimeit.py The time taken is 0.182619178
关键方法
- timeit.default_timer() – 返回当前时间,精度最高。
- timeit.repeat(stmt, setup, timer, repeat, number) – 重复运行
timeit(),返回每次运行最佳时间的列表。
示例 1 – 使用 timeit.timeit()
# 测试返回随机整数的函数
import timeit
import_module = "import random"
testcode = '''
def test():
return random.randint(10, 100)
'''
print(timeit.timeit(stmt=testcode, setup=import_module))
输出:
0.46715912400000004
示例 2 – 使用 default_timer()
# 测量单次函数调用
import timeit
import random
def test():
return random.randint(10, 100)
starttime = timeit.default_timer()
print("The start time is :", starttime)
test()
print("The time difference is :", timeit.default_timer() - starttime)
输出:
The start time is : 0.220261875 The time difference is : 0.0004737320000000045
示例 3 – 使用 timeit.repeat()
# 运行测试五次并捕获最佳时间
import timeit
import_module = "import random"
testcode = '''
def test():
return random.randint(10, 100)
'''
print(timeit.repeat(stmt=testcode, setup=import_module, repeat=5))
输出:
[0.43638873, 0.5040939680000001, 0.5069179909999999, 0.3943449330000002, 0.3546886979999999]
每个条目是 1,000,000 次运行中一次迭代的最佳时间。
命令行用法
可直接从 shell 调用 timeit:
python -m timeit [-n N] [-r N] [-s S] [-t] [-c] [-h] [code statement ...]
-n N– 语句循环次数。-r N– 整个计时过程重复次数。-s S– 计时前执行一次的设置代码。-t– 用time.time()作为计时器。-c– 用time.clock()作为计时器。-h– 显示帮助。
示例
C:\pythontest>python -m timeit -s 'text="hello world"' 20000000 loops, best of 5: 13.1 nsec per loop
另一种便捷方式是在 REPL 中调用:
import timeit
print("The time taken is ", timeit.timeit(stmt="a=10;b=10;sum=a+b"))
输出:
The time taken is 0.15048536300000137
为什么 timeit() 是计时 Python 代码的最佳工具
- 多次运行语句(默认 1,000,000)并返回最快运行,给出可靠估计。
- 计时期间禁用垃圾回收,防止干扰结果。
- 自动选择操作系统最精确的计时器(如 Windows 用
time.clock(),macOS/Linux 用time.time())。
总结
timeit 模块是基准测试短 Python 片段的必备工具。参数直观:
- stmt – 要计时代码。
- setup – 一次性设置代码。
- timer – 可选计时器函数。
- number –
stmt运行次数。
请务必使用 timeit 进行准确、可重复的测量。
Python
- Python 轻松获取当前时间与时区数据
- 精通 Python time 模块:函数、结构体与实战示例
- 精通 Python time.sleep():最佳实践、多线程与实战案例
- Python str.count() 完全指南:统计字符与子串出现次数实战
- Python format() 字符串格式化完全指南:占位符、格式化规范、类与字典应用
- Python 字符串 find() 方法完全指南:语法、参数、替代方案与计数技巧
- 精通 Python Lambda 函数:实用示例与最佳实践
- Python round() 函数详解与实战示例
- 精通 Python map() 函数:语法、示例与最佳实践
- Python collections.Counter:高效计数、更新与算术运算
- 理解 Python type() 与 isinstance():实战示例详解
- Python list.count() 专家指南:语法、示例与性能解析