diff options
author | Raymond Hettinger <python@rcn.com> | 2013-03-09 07:01:07 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2013-03-09 07:01:07 (GMT) |
commit | d8d6010df32d3f592e9d1e64a7b273498ddd6bd2 (patch) | |
tree | 3df01398634dfe73e32cadee046980e25eb66650 /Lib/functools.py | |
parent | f96b2b03bbce6119b1993523a0dc2a9c020f0a90 (diff) | |
download | cpython-d8d6010df32d3f592e9d1e64a7b273498ddd6bd2.zip cpython-d8d6010df32d3f592e9d1e64a7b273498ddd6bd2.tar.gz cpython-d8d6010df32d3f592e9d1e64a7b273498ddd6bd2.tar.bz2 |
Sync-up with 3.4 to make maintenance easier.
Diffstat (limited to 'Lib/functools.py')
-rw-r--r-- | Lib/functools.py | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/Lib/functools.py b/Lib/functools.py index dfbd023..053e44e 100644 --- a/Lib/functools.py +++ b/Lib/functools.py @@ -222,7 +222,7 @@ def lru_cache(maxsize=128, typed=False): def decorating_function(user_function): cache = {} - hits = misses = currsize = 0 + hits = misses = 0 full = False cache_get = cache.get # bound method to lookup a key or return None lock = RLock() # because linkedlist updates aren't threadsafe @@ -242,7 +242,7 @@ def lru_cache(maxsize=128, typed=False): def wrapper(*args, **kwds): # Simple caching without ordering or size limit - nonlocal hits, misses, currsize + nonlocal hits, misses key = make_key(args, kwds, typed) result = cache_get(key, sentinel) if result is not sentinel: @@ -251,14 +251,13 @@ def lru_cache(maxsize=128, typed=False): result = user_function(*args, **kwds) cache[key] = result misses += 1 - currsize += 1 return result else: def wrapper(*args, **kwds): # Size limited caching that tracks accesses by recency - nonlocal root, hits, misses, currsize, full + nonlocal root, hits, misses, full key = make_key(args, kwds, typed) with lock: link = cache_get(key) @@ -307,23 +306,22 @@ def lru_cache(maxsize=128, typed=False): last = root[PREV] link = [last, root, key, result] last[NEXT] = root[PREV] = cache[key] = link - currsize += 1 - full = (currsize >= maxsize) + full = (len(cache) >= maxsize) misses += 1 return result def cache_info(): """Report cache statistics""" with lock: - return _CacheInfo(hits, misses, maxsize, currsize) + return _CacheInfo(hits, misses, maxsize, len(cache)) def cache_clear(): """Clear the cache and cache statistics""" - nonlocal hits, misses, currsize, full + nonlocal hits, misses, full with lock: cache.clear() root[:] = [root, root, None, None] - hits = misses = currsize = 0 + hits = misses = 0 full = False wrapper.cache_info = cache_info |