东台市上往网

Python计算代码运行时间的四种方法

2026-03-26 12:12:01 浏览次数:3
详细信息

1. time.time() 方法(最简单直接)

import time

start_time = time.time()

# 要计时的代码
result = sum(i**2 for i in range(1000000))

end_time = time.time()
execution_time = end_time - start_time
print(f"代码运行时间: {execution_time:.6f} 秒")

2. time.perf_counter() 方法(高精度计时)

import time

start = time.perf_counter()

# 要计时的代码
result = sum(i**2 for i in range(1000000))

end = time.perf_counter()
execution_time = end - start
print(f"代码运行时间: {execution_time:.6f} 秒")

优点:比time.time()精度更高,专门用于性能测试

3. timeit 模块(专门用于小代码片段)

import timeit

# 方法1:使用 timeit() 函数
code_to_test = """
result = sum(i**2 for i in range(1000))
"""
execution_time = timeit.timeit(stmt=code_to_test, number=1000)
print(f"1000次运行总时间: {execution_time:.6f} 秒")
print(f"单次平均时间: {execution_time/1000:.8f} 秒")

# 方法2:使用 Timer 类
timer = timeit.Timer(stmt='sum(i**2 for i in range(1000))')
execution_time = timer.timeit(number=1000)

4. 装饰器方法(优雅复用)

import time
from functools import wraps

def timing_decorator(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time.perf_counter()
        result = func(*args, **kwargs)
        end_time = time.perf_counter()
        execution_time = end_time - start_time
        print(f"函数 {func.__name__} 运行时间: {execution_time:.6f} 秒")
        return result
    return wrapper

# 使用装饰器
@timing_decorator
def calculate_sum(n):
    return sum(i**2 for i in range(n))

# 调用被装饰的函数
result = calculate_sum(1000000)

5. contextmanager 上下文管理器(推荐用于代码块)

import time
from contextlib import contextmanager

@contextmanager
def timer_context(name="代码块"):
    start_time = time.perf_counter()
    yield
    end_time = time.perf_counter()
    execution_time = end_time - start_time
    print(f"{name} 运行时间: {execution_time:.6f} 秒")

# 使用示例
with timer_context("循环计算"):
    result = sum(i**2 for i in range(1000000))

性能对比示例

import time
import timeit

def test_function(n):
    return sum(i**2 for i in range(n))

# 方法对比
if __name__ == "__main__":
    n = 100000

    print("=== 方法对比 ===")

    # 方法1: time.time()
    start = time.time()
    result = test_function(n)
    print(f"time.time(): {time.time() - start:.6f}秒")

    # 方法2: time.perf_counter()
    start = time.perf_counter()
    result = test_function(n)
    print(f"time.perf_counter(): {time.perf_counter() - start:.6f}秒")

    # 方法3: timeit
    time_taken = timeit.timeit(lambda: test_function(n), number=10)/10
    print(f"timeit: {time_taken:.6f}秒")

选择建议

快速简单测试:使用 time.time() 精确性能测试:使用 time.perf_counter() 测量小代码片段:使用 timeit 模块 函数性能监控:使用装饰器 代码块计时:使用上下文管理器

注意事项

相关推荐