You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取functools._lru_cache_wrapper对象的缓存字典?

解决functools.cache装饰器缓存字典访问问题

functools.cache本质是functools.lru_cache(maxsize=None)的别名,它返回的functools._lru_cache_wrapper对象并没有公开的cache属性,这就是你访问cached_fib.cache时触发AttributeError的原因。

获取实际缓存字典的方法

要访问内部的缓存字典,可以直接访问装饰后函数的私有属性_cache(注意属性名前有单个下划线):

import functools
import time

@functools.cache
def cached_fib(n):
    assert n > 0
    if n <= 2:
        return 1
    return cached_fib(n - 1) + cached_fib(n - 2)

t1 = time.perf_counter()
cached_fib(400)
t2 = time.perf_counter()
print(f"cached_fib: {t2 - t1}")    # 0.0004117000003134308

# 访问并打印缓存字典信息
cache_dict = cached_fib._cache
print(f"缓存条目数量: {len(cache_dict)}")
# 示例:打印前5个缓存的键值对
print("前5个缓存条目:")
for key, value in list(cache_dict.items())[:5]:
    print(f"  {key}: {value}")

注意事项

  • _cache属于Python内部实现细节,并非公开API,不同Python版本可能会修改这个属性的名称或结构,长期维护的代码应避免直接依赖它。
  • 如果仅需查看缓存的统计数据(命中次数、未命中次数等),建议使用公共方法cached_fib.cache_info(),它返回一个包含缓存统计信息的命名元组,兼容性更好:
    print(cached_fib.cache_info())
    # 输出示例:CacheInfo(hits=398, misses=400, maxsize=None, currsize=400)
    

内容的提问来源于stack exchange,提问作者Fed_Dragon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:25:13