3 def memoize_with_backing(backing, inverse_of=None):
6 res = backing.get((f, args), _nothing)
7 if res is not _nothing:
12 backing[(f, args)] = res
13 if inverse_of is not None:
15 raise ValueError('inverse_of can only be used for functions taking one argument')
16 backing[(inverse_of, (res,))] = args[0]
23 return memoize_with_backing({})(f)