最常用、最轻量的python函数计时方法是time模块:用time.time()适合秒级粗略计时,time.perf_counter()推荐用于高精度测量,还可封装为装饰器复用。

统计Python函数执行时间最常用、最轻量的方法就是用time模块,尤其适合快速验证、调试或简单性能对比。
用time.time()测函数耗时(适合秒级精度)
time.time()返回当前时间戳(浮点数,单位为秒),适合对运行时间较长(>0.1秒)的函数做粗略计时。注意它受系统时钟调整影响,但日常使用足够可靠。
- 在函数调用前记录起始时间:
start = time.time() - 调用函数后立即记录结束时间:
end = time.time() - 差值即为耗时:
elapsed = end - start
示例:
import timedef slow_task():
time.sleep(1.2)
start = time.time()
slow_task()
print(f"耗时:{time.time() - start:.3f} 秒")
用time.perf_counter()测精确耗时(推荐)
这是time模块中**最推荐**的计时方式。它提供单调、高分辨率的计时器,不受系统时间调整或睡眠影响,专为测量短时间间隔设计(如毫秒甚至微秒级)。
立即学习“Python免费学习笔记(深入)”;
- 用法与
time.time()类似,但更精准:start = time.perf_counter() - 函数执行完后:
elapsed = time.perf_counter() - start - 多次运行取平均值时,
perf_counter结果更稳定
示例:
import timedef quick_sort(arr):
return sorted(arr)
data = list(range(10000, 0, -1))
start = time.perf_counter()
quick_sort(data)
print(f"排序耗时:{time.perf_counter() - start:.6f} 秒")
封装成装饰器,一键统计任意函数
不想每次手动加计时代码?写个简易装饰器,让统计变得可复用。
- 导入
functools.wraps保持原函数元信息 - 内部用
perf_counter开始/结束计时 - 打印函数名和耗时,也可返回耗时值供后续处理
示例:
import timefrom functools import wraps
def timer(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
elapsed = time.perf_counter() - start
print(f"[{func.__name__}] 耗时 {elapsed:.6f} 秒")
return result
return wrapper
@timer
def fibonacci(n):
if n return n
return fibonacci(n-1) + fibonacci(n-2)
注意事项与常见误区
单纯用time.time()在循环中反复调用,可能因系统调度引入误差;而perf_counter虽好,但不适用于跨进程或需要绝对时间戳的场景。
- 避免用
time.clock()(Python 3.8+ 已移除) - 测试小函数时,单次运行结果波动大,建议结合
timeit模块做多次自动重复 - 若需分析函数内部各步骤耗时,考虑用
line_profiler或cProfile - 注意I/O、GC、CPU频率变化等外部因素也会干扰结果
不复杂但容易忽略。掌握perf_counter和装饰器写法,就能覆盖大多数日常计时需求。










