Advertisement
MathQ_

Untitled

Oct 24th, 2022
1,126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.81 KB | None | 0 0
  1. from collections import deque
  2.  
  3.  
  4. def cache(n):
  5.     lru_cache = dict()
  6.     order = deque()
  7.     separator = object()
  8.  
  9.     def decorator(function):
  10.         def wrapped(*args, **kwargs):
  11.             nonlocal lru_cache, order
  12.             key = args + (separator,) + tuple(sorted(kwargs.items()))
  13.             if len(lru_cache.get(key, [])) == 0:
  14.                 value = function(*args, **kwargs)
  15.                 lru_cache[key] = deque([len(order)])
  16.                 order.append([key, value])
  17.             else:
  18.                 lru_cache[key].append(len(order))
  19.                 order.append([key, order[lru_cache[key][0]]][1])
  20.             if len(order) > n:
  21.                 lru_cache[order[0][0]].popleft()
  22.                 order.popleft()
  23.             return order[-1][1]
  24.  
  25.         return wrapped
  26.  
  27.     return decorator
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement