Search code examples
pythoncachinglazy-evaluationmemoization

Python lazy evaluator


Is there a Pythonic way to encapsulate a lazy function call, whereby on first use of the function f(), it calls a previously bound function g(Z) and on the successive calls f() returns a cached value?

Please note that memoization might not be a perfect fit.

I have:

f = g(Z)
if x:
     return 5
elif y:
     return f
elif z:
     return h(f)

The code works, but I want to restructure it so that g(Z) is only called if the value is used. I don't want to change the definition of g(...), and Z is a bit big to cache.

EDIT: I assumed that f would have to be a function, but that may not be the case.


Solution

  • I'm a bit confused whether you seek caching or lazy evaluation. For the latter, check out the module lazy.py by Alberto Bertogli.