E.g., I have:
def readDb():
# Fetch a lot of data from db, spends a lot time
...
return aList
def calculation():
x = readdb()
# Process
Updated answer for modern Python
For anyone still searching for how to do this, the standard library functools
includes a decorator function @functools.lru_cache to do this.
For example (from the docs):
@lru_cache(maxsize=32)
def get_pep(num):
'Retrieve text of a Python Enhancement Proposal'
resource = 'http://www.python.org/dev/peps/pep-%04d/' % num
try:
with urllib.request.urlopen(resource) as s:
return s.read()
except urllib.error.HTTPError:
return 'Not Found'
This would store the last 32
calls to get_pep
and when it is called with the same argument, the cached value will be returned.