python——@functools.lru_cache修饰符简单使用

        使用functools.lru_cache修饰符的函数,简单的理解为保存多次执行结果,当传入某一参数的执行结果已经执行过,则不会再一次执行而是直接返回结果。

functools.lru_cache(maxsize=128, typed=False)接受两个参数:
        maxsize:默认为128,表示保存使用functools.lru_cache修饰符的函数最近执行结果的次数,会根据size大小逐步覆盖前期执行结果,被覆盖结果需要再次执行函数。
        typed:默认为False,表示不同数据类型保存在一起,True,表示不同数据类型分开保存

【sample】

In [1]: import functools
In [2]: @functools.lru_cache(3) # 传入3,表示只保存最近执行的3次结果
        def test_func(a, b):
            print("test_func: a=%d, b=%d" %(a, b))
            return a+b
# 此时缓存中记录为空
In [3]: res = test_func(1,2)	In [4]: res
Out[3]: test_func: a=1, b=2		Out[4]: 3
# 此时缓存保存传入参数 (1,2)执行结果

In [5]: res = test_func(3,4)	In [6]: res 
Out[5]: test_func: a=3, b=4		Out[6]: 7
# 此时缓存保存传入参数(1,2)、(3,4)执行结果

In [7]: res = test_func(5,6)	In [8]: res
Out[7]: test_func: a=5, b=6		Out[8]: 11
# 此时缓存保存传入参数(1,2)、(3,4)、(5,6)执行结果


In [9]: res = test_func(1,2)
In[10]: res
Out[10]:3	# 最近3次的执行结果包含传入参数为1和2的情况,因此直接从缓存读取,不会再次执行,直接返回2
# 此时缓存保存传入参数(3,4)、(5,6)、(1,2)执行结果

In [11]: res = test_fun(7, 8)	In [12]: res
Out[11]: test_func: a=7, b=8	Out[12]: 15
# 此时缓存保存传入参数(5,6)、(1,2)、(7,8)执行结果

# 最近3次的执行结果不包含传入参数为3和4的情况,因此需要再次执行函数
In [13] res = test_func(3,4)	In [14]: res
Out[13]: test_func: a=3, b=4	Out[14]: 7
# 此时缓存保存传入参数(1,2)、(7,8)、(3,4)执行结果
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值