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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值