そこにはたくさんのメモ化デコレータがありますが、任意の関数シグネチャをサポートするメモ化デコレータを作成する方法に興味がありますが、結果をいつメモ化するかを関数に決定させますか? このようなもの:
def conditional_memoize(f):
cache = {}
@wraps(f)
def conditional_f(*args, **kwargs):
return f(*args, **kwargs)
return conditional_f
@conditional_memoize
def my_func(a, b, c):
if str(a) + str(b) + str(c) in cache:
return cache[str(a) + str(b) + str(c)]
res = # compute the result
if some_arbitrary_condition:
cache[str(a) + str(b) + str(c)] = res
return res
ただし、NameError
. とにかく問題への賢いアプローチはありますか?クラス メソッドとクラス キャッシュはいつでも使用できますが、このためのデコレータ パターンがあるかどうかを確認したかっただけです。