当前位置: 首页 > news >正文

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

根据需求选择最适合的方法即可!

相关文章:

  • K8s 1.27.1 实战系列(五)Namespace
  • GEFFEN/GF-SPMS8分布式电源强电控制器
  • 【408考研网络】2024考研原题计算机网络知识点总结(共六题)
  • 维度建模维度表技术基础解析(以电商场景为例)
  • linux上将sh脚本文件打包成二进制程序文件
  • 深入探究LLamaFactory推理DeepSeek蒸馏模型时无法展示<think>思考过程的问题
  • 微电网协调控制器ACCU-100 分布式光伏 光储充一本化
  • 驭码CodeRider 闪电适配阿里QwQ-32B:8小时全栈集成,AI编程效率飞跃!
  • 关于tomcat使用中浏览器打开index.jsp后中文显示不正常是乱码,但英文正常的问题
  • Android Coil总结
  • AI是否可以实现全自动的生成内容,看看我的想法
  • 【连珠云弈】网页五子棋版项目测试报告
  • DeepSeek-R1:使用KTransformers实现高效部署指南
  • cs144 Lab Checkpoint 0: networking warmup
  • 使用 Arduino 和 Wi-Fi 控制 RGB LED
  • [MySQL初阶]MySQL(5)内置函数详解
  • 【搜索】P3654 First Step (ファーストステップ)
  • 备考六级:词汇量积累(day4)
  • 嵌入式学习L5D2-exec函数族和守护进程
  • 基于uniapp的蓝牙打印功能(佳博打印机已测试)
  • 新华时评:查查屋顶溜坡背后的“溜坡”
  • 越南前国家主席陈德良因病去世
  • 马斯克:大幅削减政治支出,仍将执掌特斯拉至少5年,除非去世
  • 钟睒睒:不反对代工,但农夫山泉目前所有产品是无法代工的
  • 国家发改委谈整治“内卷式”竞争:加力破除地方保护和市场分割,遏制落后产能无序扩张
  • 国家发改委:大部分稳就业稳经济政策将在6月底前落地