import time
import hashlib
import pickle
cache = {}
def is_obsolete(entry, duration): # 判断缓存是否过期,返回True则过期
d = time.time() - entry['time']
return d > duration
def compute_key(function, args, kwargs): # 将传入的参数序列化
key = pickle.dumps((function.__name__, args, kwargs))
return hashlib.sha1(key).hexdigest()
def memoize(duration=10): # 装饰器中缓存时间默认为10秒
def _memorize(function): # 第二层传函数
def __memorize(*args, **kwargs): # 第三层传入非固定参数
key = compute_key(function, args, kwargs)
if key in cache and not is_obsolete(cache[key], duration):
print('we got a winner', end=' ')
return cache[key]['value'] # 如果缓存中有,就直接返回缓存过的结果
result = function(*args, **kwargs)
cache[key] = {'value': result, 'time': time.time()}
print(cache)
return result
return __memorize
return _memorize
@memoize(100)
def complex(a,b):
time.sleep(1)
return a+b
while True:
a=int(input('请输入a: '))
b=int(input('请输入b: '))
print(complex(a, b))
用装饰器缓存某个函数的结果
最新推荐文章于 2023-02-26 15:19:06 发布