Skip to content

Instantly share code, notes, and snippets.

@davidchambers
Created October 16, 2013 18:16
Show Gist options
  • Save davidchambers/7012316 to your computer and use it in GitHub Desktop.
Save davidchambers/7012316 to your computer and use it in GitHub Desktop.
The right approach to memoization: keep it separate
import time
def memoize(f):
memo = {}
def wrapper(*args):
if args not in memo:
memo[args] = f(*args)
return memo[args]
return wrapper
def _identity(x):
time.sleep(0.05) # simulate expensive operation
return x
identity = memoize(_identity)
if __name__ == '__main__':
import timeit
for desc, name in (('original', '_identity'), ('memoized', 'identity')):
print('{}: {}'.format(desc, timeit.timeit('{}(42)'.format(name),
setup='from __main__ import {}'.format(name), number=100)))
@davidchambers
Copy link
Author

$ python example.py
original: 5.08163619041
memoized: 0.0512199401855

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment