Skip to content

Instantly share code, notes, and snippets.

@kjaquier
Created July 16, 2014 13:54
Show Gist options
  • Save kjaquier/40f57cbcbd80a12df8c8 to your computer and use it in GitHub Desktop.
Save kjaquier/40f57cbcbd80a12df8c8 to your computer and use it in GitHub Desktop.
Function decorator for lazy evaluation. Only for argument-less functions. Shouldn't be used for functions with side-effects.
def lazy(fun):
class Memoizer(object):
def __init__(self, fun):
self.fun = fun
self.set = False
self.res = None
def __call__(self):
if not self.set:
self.set = True
self.res = self.fun()
return self.res
return Memoizer(fun)
# Demo (with side-effect function)
i = 0
def fi():
global i
i += 1
print i
@lazy
def fj():
global i
i += 1
print i
fi()
fi()
fi()
fj()
fj()
fj()
# 1
# 2
# 3
# 4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment