1. 应用场景:算法
屡次调用同一函数缓存
2. 普通写法:函数
1 def say(name): 2 print("hellow:%s"%name) 3 now = datetime.datetime.now() 4 return now 5 6 now = say('tom') 7 print("time:%s"%now) 8 time.sleep(5) 9 10 now = say('tom') 11 print("time:%s"%now)
结果:spa
hellow:tom
time:2019-09-05 18:20:19.637917
hellow:tom
time:2019-09-05 18:20:24.639228code
3. 缓存写法:blog
1 import time 2 import datetime 3 from functools import lru_cache 4 5 @lru_cache(maxsize=32) 6 def say(name): 7 print("hellow:%s"%name) 8 now = datetime.datetime.now() 9 return now 10 11 now = say('tom') 12 print("time:%s"%now) 13 time.sleep(5) 14 15 now = say('tom') 16 print("time:%s"%now)
结果:hash
hellow:tom
time:2019-09-05 16:30:22.451122
time:2019-09-05 16:30:22.451122class
4. 总结:import
lru_cache(maxsize=128,typed=False)
接收两个参数,第一个参数 maxsize
表示最多缓存多少个结果,这个数字建议设置为2的幂。超出这个结果就会启用 LRU 算法删除不经常使用的数据。第二个参数 typed
表示是否检查参数类型,默认为 False
,若是设置为 True
,那么参数 3
和 3.0
会被当作不一样的数据处理。lru_cache
底层是基于字典来实现的缓存,因此参数都必须是 hashable 的,不然会致使报错。它山之石——未闻codedate