Python计算程序用时方法大全(基础,高精度,装饰器,无侵入式,格式化时间输出)
在 Python
中计算代码段的运行时间,可以使用 time
模块或 timeit
模块。以下是几种常见方法,按场景分类:
方法 1:基础计时(time.time())
适用于简单场景,计算代码块的 实际运行时间(挂钟时间)。
import time
# 记录开始时间
start_time = time.time()
# 你的代码段
for _ in range(1000000):
pass # 这里替换为你的代码
# 记录结束时间
end_time = time.time()
# 计算运行时间(秒)
elapsed_time = end_time - start_time
print(f"开始时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(start_time))}")
print(f"结束时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(end_time))}")
print(f"运行时长: {elapsed_time:.6f} 秒")
方法 2:高精度计时(time.perf_counter())
适合需要 高精度计时 的场景(如性能测试),避免系统时间调整的影响。
import time
start = time.perf_counter() # 高精度计时起点
# 你的代码段
sum(range(1000000))
end = time.perf_counter()
print(f"运行时长: {end - start:.8f} 秒") # 显示更精确的小数位
方法 3:代码块计时(上下文管理器)
封装为 可重用的计时工具,方便多次调用。
import time
from contextlib import contextmanager
@contextmanager
def timer():
start = time.perf_counter()
yield # 在此处插入被计时代码
end = time.perf_counter()
print(f"运行时长: {end - start:.6f} 秒")
# 使用示例
with timer():
# 你的代码段
result = [x**2 for x in range(10000)]
方法 4:函数计时装饰器
为函数添加计时功能,适合 快速测试函数执行时间。
import time
def time_it(func):
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
end = time.perf_counter()
print(f"函数 {func.__name__} 运行时长: {end - start:.6f} 秒")
return result
return wrapper
# 使用示例
@time_it
def my_function():
total = 0
for i in range(1000000):
total += i
return total
my_function()
方法 5:使用 timeit 模块
适合 多次运行代码取平均时间,排除偶然误差。
import timeit
code_to_test = """
result = []
for i in range(1000):
result.append(i**2)
"""
# 默认执行次数为 10000 次,可自定义
time = timeit.timeit(stmt=code_to_test, number=100)
print(f"平均每次运行时间: {time / 100:.6f} 秒")
关键区别:
方法 特点 适用场景
time.time() 简单,但精度低(受系统时间影响) 粗略计时
time.perf_counter 高精度,计算实际耗时(包括睡眠时间) 性能测试
time.process_time 计算 CPU 时间(不包括睡眠) 分析 CPU 占用
timeit 多次运行取平均,排除干扰 基准测试和代码优化
高级技巧:格式化时间输出
elapsed = 123.456789
# 转换为小时、分钟、秒
hours = int(elapsed // 3600)
minutes = int((elapsed % 3600) // 60)
seconds = elapsed % 60
print(f"{hours}小时 {minutes}分钟 {seconds:.2f}秒")
输出:0小时 2分钟 3.46秒
根据需求选择最适合的方法即可!