아마 할 것 :
def memoize(obj):
"""A decorator to cache advice objects using the advice key"""
cache = obj.cache = {}
@functools.wraps(obj)
def memoizer(*args, **kwargs):
key = args[0]
if key not in cache:
cache[key] = obj(*args, **kwargs)
return cache[key]
return memoizer
이 같은 장식에 인수으로 최대를 제공 분별 같다 : 여기
내가 현재 사용하고 루틴의
from collections import deque
def memoize(obj, maxlen = None):
"""A decorator to cache advice objects using the advice key"""
cache = obj.cache = {}
deck = obj.deck = deque([], maxlen = maxlen)
@functools.wraps(obj)
def memoizer(*args, **kwargs):
key = args[0]
if key not in cache:
if len(deck) == deck.maxlen:
del cache[deck.popleft()[0]]
temp = obj(*args, **kwargs)
cache[key] = temp
deck.append((key, temp))
return cache[key]
return memoizer
나는 닫아야한다. 그러나 편집자가 프롬프트에 표시하지는 않았다. 약간의 정제가 필요할 수 있습니다. 파이썬 3.2을 사용하는 경우
개체의 크기가 다른 경우 캐시에서 사용하는 메모리 공간을 예측하기가 어려울 수 있습니다. 마지막으로 사용한 객체가 재사용 될 것으로 기대할 수 없다면 최상의 전략은 메모리에 첫 번째 xxx 객체를 유지하는 것일 수 있습니다. –