From 5fa40c01ad6144ea2dac37e48860334b590806fc Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Thu, 25 Nov 2010 08:11:57 +0000 Subject: Clean-up docstring, comments, and whitespace. --- Lib/functools.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/Lib/functools.py b/Lib/functools.py index f45ba00..c1fa170 100644 --- a/Lib/functools.py +++ b/Lib/functools.py @@ -118,13 +118,22 @@ def lru_cache(maxsize=100): """Least-recently-used cache decorator. Arguments to the cached function must be hashable. - Cache performance statistics stored in f.hits and f.misses. - Clear the cache using f.clear(). - http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used + + Performance statistics stored in f.cache_hits and f.cache_misses. + Clear the cache and statistics using f.cache_clear(). + The underlying function is stored in f.__wrapped__. + + See: http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used """ - def decorating_function(user_function, tuple=tuple, sorted=sorted, - len=len, KeyError=KeyError): + # Users should only access the lru_cache through its public API: + # cache_hits, cache_misses, cache_clear(), and __wrapped__ + # The internals of the lru_cache are encapsulated for thread safety and + # to allow the implementation to change (including a possible C version). + + def decorating_function(user_function, + tuple=tuple, sorted=sorted, len=len, KeyError=KeyError): + cache = OrderedDict() # ordered least recent to most recent cache_popitem = cache.popitem cache_renew = cache.move_to_end @@ -159,4 +168,5 @@ def lru_cache(maxsize=100): wrapper.cache_hits = wrapper.cache_misses = 0 wrapper.cache_clear = cache_clear return wrapper + return decorating_function -- cgit v0.12