diff options
Diffstat (limited to 'python/analytics/utils.py')
| -rw-r--r-- | python/analytics/utils.py | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/python/analytics/utils.py b/python/analytics/utils.py index fab94397..0100f5bc 100644 --- a/python/analytics/utils.py +++ b/python/analytics/utils.py @@ -102,15 +102,19 @@ def build_table(rows, format_strings, row_format): return r -def memoize(f): - @wraps(f) - def cached_f(*args, **kwargs): - obj = args[0] - key = (f.__name__, hash(args)) - if key in obj._cache: - return obj._cache[key] - else: - v = f(*args, **kwargs) - obj._cache[key] = v - return v - return cached_f +def memoize(hasher=lambda args: (hash(args),)): + + def memoize_(f): + @wraps(f) + def cached_f(*args, **kwargs): + self = args[0] + key = (f.__name__, *hasher(args)) + if key in self._cache: + return self._cache[key] + else: + v = f(*args, **kwargs) + self._cache[key] = v + return v + return cached_f + + return memoize_ |
