在 编写测试case中,常遇到需重复调用、计算逻辑耗时的函数(像复杂数学运算、大量数据查询)。重复执行这类函数会浪费计算资源、拖慢程序。functools 模块的 cache 装饰器,能缓存函数调用结果,提升效率。
import time
from functools import cache先导入 time 模块(用于模拟耗时操作、计算执行时间 ),再从 functools 导入 cache 装饰器,为缓存函数结果做准备。
@cache
def slow_function(x):
time.sleep(2) # 模拟耗时计算,暂停 2 秒
return x * x用 @cache 装饰 slow_function 函数。当调用该函数时,若入参 x 是之前计算过的,直接取缓存结果;若没计算过,执行函数体(含 time.sleep(2) 模拟的耗时操作 ),并缓存结果,后续相同入参调用就不用再执行耗时逻辑。
start = time.time()
print(slow_function(10)) # 首次调用,执行函数体,耗时约 2 秒
print("First call:", time.time() - start, "seconds")记录开始时间 start ,调用 slow_function(10) 。因是首次,执行 time.sleep(2) 等逻辑,计算并打印结果 100 ,再算出并打印首次调用耗时(约 2 秒 )。
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