@@ -146,7 +146,7 @@ def decorating_function(user_function,
146146
147147 hits = misses = 0
148148 kwd_mark = (object (),) # separates positional and keyword args
149- lock = Lock () # needed because ordereddicts aren 't threadsafe
149+ lock = Lock () # needed because OrderedDict isn 't threadsafe
150150
151151 if maxsize is None :
152152 cache = dict () # simple cache without ordering or size limit
@@ -160,13 +160,15 @@ def wrapper(*args, **kwds):
160160 try :
161161 result = cache [key ]
162162 hits += 1
163+ return result
163164 except KeyError :
164- result = user_function (* args , ** kwds )
165- cache [key ] = result
166- misses += 1
165+ pass
166+ result = user_function (* args , ** kwds )
167+ cache [key ] = result
168+ misses += 1
167169 return result
168170 else :
169- cache = OrderedDict () # ordered least recent to most recent
171+ cache = OrderedDict () # ordered least recent to most recent
170172 cache_popitem = cache .popitem
171173 cache_renew = cache .move_to_end
172174
@@ -176,18 +178,20 @@ def wrapper(*args, **kwds):
176178 key = args
177179 if kwds :
178180 key += kwd_mark + tuple (sorted (kwds .items ()))
179- try :
180- with lock :
181+ with lock :
182+ try :
181183 result = cache [key ]
182- cache_renew (key ) # record recent use of this key
184+ cache_renew (key ) # record recent use of this key
183185 hits += 1
184- except KeyError :
185- result = user_function (* args , ** kwds )
186- with lock :
187- cache [key ] = result # record recent use of this key
188- misses += 1
189- if len (cache ) > maxsize :
190- cache_popitem (0 ) # purge least recently used cache entry
186+ return result
187+ except KeyError :
188+ pass
189+ result = user_function (* args , ** kwds )
190+ with lock :
191+ cache [key ] = result # record recent use of this key
192+ misses += 1
193+ if len (cache ) > maxsize :
194+ cache_popitem (0 ) # purge least recently used cache entry
191195 return result
192196
193197 def cache_info ():
0 commit comments