Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from collections import deque
- def cache(n):
- lru_cache = dict()
- order = deque()
- separator = object()
- def decorator(function):
- def wrapped(*args, **kwargs):
- nonlocal lru_cache, order
- key = args + (separator,) + tuple(sorted(kwargs.items()))
- if len(lru_cache.get(key, [])) == 0:
- value = function(*args, **kwargs)
- lru_cache[key] = deque([len(order)])
- order.append([key, value])
- else:
- lru_cache[key].append(len(order))
- order.append([key, order[lru_cache[key][0]]][1])
- if len(order) > n:
- lru_cache[order[0][0]].popleft()
- order.popleft()
- return order[-1][1]
- return wrapped
- return decorator
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement