Skip to content

Instantly share code, notes, and snippets.

@beoliver
Last active August 29, 2015 14:22
Show Gist options
  • Save beoliver/98968a2ec1f1fb8a54f7 to your computer and use it in GitHub Desktop.
Save beoliver/98968a2ec1f1fb8a54f7 to your computer and use it in GitHub Desktop.
class Memoize(object):
def __init__(self, f):
self.f = f
self.computed = {}
def __call__(self, *args):
xs = self.computed.get(args)
if xs :
return xs
else :
value = self.f(*args)
self.computed[args] = value
return value
def unmemoize(self):
return self.f
def fact(n):
print("computing", n)
if n == 0:
return 1
else:
return fact(n-1) * n
fact = Memoize(fact)
# fact(5)
# fact(6)
# ...
fact = fact.unmemoize()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment