I am fairly new to the concepts of caching & memoization. I've read some other discussions & resources here, here, and here, but haven't been able to follow them all that well.
Say that I have two member functions within a class. (Simplified example below.) Pretend that the first function total
is computationally expensive. The second function subtotal
is computationally simple, except that it uses the return from the first function, and so also becomes computationally expensive because of this, in that it currently needs to re-call total
to get its returned result.
I want to cache the results of the first function and use this as the input to the second, if the input y
to subtotal
shares the input x
to a recent call of total
. That is:
- If calling subtotal() where
y
is equal to the value ofx
in a
previous call oftotal
, then use that cached result instead of
re-callingtotal
. - Otherwise, just call
total()
usingx = y
.
Example:
class MyObject(object):
def __init__(self, a, b):
self.a, self.b = a, b
def total(self, x):
return (self.a + self.b) * x # some time-expensive calculation
def subtotal(self, y, z):
return self.total(x=y) + z # Don't want to have to re-run total() here
# IF y == x from a recent call of total(),
# otherwise, call total().