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 模块
函数性能监控:使用装饰器
代码块计时:使用上下文管理器
注意事项
- 避免在第一次运行时测量性能(可能存在缓存)
- 多次运行取平均值更准确
- 使用
perf_counter() 而不是 time() 以获得更高精度
- 注意系统时间变化可能影响
time.time() 的结果