首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 中 functools.cache 装饰器

Python 中 functools.cache 装饰器

作者头像
小田测测看
发布2026-06-17 17:04:58
发布2026-06-17 17:04:58
1210
举报

在 编写测试case中,常遇到需重复调用、计算逻辑耗时的函数(像复杂数学运算、大量数据查询)。重复执行这类函数会浪费计算资源、拖慢程序。functools 模块的 cache 装饰器,能缓存函数调用结果,提升效率。

解析

导入

代码语言:javascript
复制
import time
from functools import cache

先导入 time 模块(用于模拟耗时操作、计算执行时间 ),再从 functools 导入 cache 装饰器,为缓存函数结果做准备。

装饰器使用

代码语言:javascript
复制
@cache
def slow_function(x):
    time.sleep(2)  # 模拟耗时计算,暂停 2 秒
    return x * x

@cache 装饰 slow_function 函数。当调用该函数时,若入参 x 是之前计算过的,直接取缓存结果;若没计算过,执行函数体(含 time.sleep(2) 模拟的耗时操作 ),并缓存结果,后续相同入参调用就不用再执行耗时逻辑。

时间统计

  1. 1. 首次调用
代码语言:javascript
复制
start = time.time()
print(slow_function(10))  # 首次调用,执行函数体,耗时约 2 秒
print("First call:", time.time() - start, "seconds")

记录开始时间 start ,调用 slow_function(10) 。因是首次,执行 time.sleep(2) 等逻辑,计算并打印结果 100 ,再算出并打印首次调用耗时(约 2 秒 )。

  1. 2. 二次调用
代码语言:javascript
复制
start = time.time()
print(slow_function(10))  # 二次调用,直接取缓存,几乎不耗时
print("Second call:", time.time() - start, "seconds")

再次记录开始时间,调用 slow_function(10) 。因入参 10 已缓存,直接返回结果 100 ,耗时极短(如示例里的 5.245208740234375e-06 秒 ),打印结果和耗时。

结果分析

  • • 首次调用 slow_function(10) ,函数执行完整逻辑(含 2 秒暂停 ),所以耗时约 2 秒。
  • • 二次调用时,cache 装饰器直接返回缓存结果,跳过耗时逻辑,执行时间大幅缩短,体现缓存对重复调用的优化效果。

总结

functools.cache 装饰器适合优化重复调用、计算逻辑固定的函数,通过缓存结果减少不必要计算,提升程序效率。但要留意,它适用于函数入参可哈希、结果无需实时更新的场景,若函数依赖外部可变状态(如全局变量、数据库数据变化 ),需谨慎使用,避免结果不准确。

#Python #PythonFunctools

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程拾光 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解析
    • 导入
    • 装饰器使用
    • 时间统计
  • 结果分析
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档