Minor cleanup: add whitespace, add comments, bring function attribute updates together.

This commit is contained in:
Raymond Hettinger 2012-03-30 13:15:48 -07:00
parent 0192ba33b4
commit 1ff50df8bc

View file

@ -161,6 +161,7 @@ def lru_cache(maxsize=100, typed=False):
See: http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used See: http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used
""" """
# Users should only access the lru_cache through its public API: # Users should only access the lru_cache through its public API:
# cache_info, cache_clear, and f.__wrapped__ # cache_info, cache_clear, and f.__wrapped__
# The internals of the lru_cache are encapsulated for thread safety and # The internals of the lru_cache are encapsulated for thread safety and
@ -192,7 +193,6 @@ def lru_cache(maxsize=100, typed=False):
if maxsize == 0: if maxsize == 0:
@wraps(user_function)
def wrapper(*args, **kwds): def wrapper(*args, **kwds):
# no caching, just do a statistics update after a successful call # no caching, just do a statistics update after a successful call
nonlocal misses nonlocal misses
@ -202,7 +202,6 @@ def lru_cache(maxsize=100, typed=False):
elif maxsize is None: elif maxsize is None:
@wraps(user_function)
def wrapper(*args, **kwds): def wrapper(*args, **kwds):
# simple caching without ordering or size limit # simple caching without ordering or size limit
nonlocal hits, misses nonlocal hits, misses
@ -218,7 +217,6 @@ def lru_cache(maxsize=100, typed=False):
else: else:
@wraps(user_function)
def wrapper(*args, **kwds): def wrapper(*args, **kwds):
# size limited caching that tracks accesses by recency # size limited caching that tracks accesses by recency
nonlocal hits, misses nonlocal hits, misses
@ -238,11 +236,12 @@ def lru_cache(maxsize=100, typed=False):
return result return result
result = user_function(*args, **kwds) result = user_function(*args, **kwds)
with lock: with lock:
# put result in a new link at the front of the list
last = root[PREV] last = root[PREV]
link = [last, root, key, result] link = [last, root, key, result]
cache[key] = last[NEXT] = root[PREV] = link cache[key] = last[NEXT] = root[PREV] = link
if _len(cache) > maxsize: if _len(cache) > maxsize:
# purge least recently used cache entry # purge the least recently used cache entry
old_prev, old_next, old_key, old_result = root[NEXT] old_prev, old_next, old_key, old_result = root[NEXT]
root[NEXT] = old_next root[NEXT] = old_next
old_next[PREV] = root old_next[PREV] = root
@ -265,6 +264,6 @@ def lru_cache(maxsize=100, typed=False):
wrapper.cache_info = cache_info wrapper.cache_info = cache_info
wrapper.cache_clear = cache_clear wrapper.cache_clear = cache_clear
return wrapper return update_wrapper(wrapper, user_function)
return decorating_function return decorating_function