我在这个函数中要做的就是创建一个本地表,并在需要计算结果的表和存储结果时将函数包装起来。这应该适用于任何函数,只要它只使用hashable参数调用。确保您支持任意数量的位置和关键字参数。 (我们不能使用全局表)
这将用作:
@memoize
def fib(n):
if n > 1:
return fib(n-1) + fib(n-2)
else:
return n
有人可以给我一些提示>?
答案 0 :(得分:0)
def memoize(f):
local_table = create_a_local_table()
@functools.wraps
def wrapper(*args, **kwargs):
assert isinstance(len(args), numbers.Number)
assert isinstance(len(kwargs), numbers.Number)
return lookup_into_the_table_and_store_of_the_result_if_it_needs_to_be_computed(*args, **kwargs)
return wrapper
实现这两个功能留给读者练习。请注意,第二个必须是memoize
中的本地函数,除非您提供其他方式来访问local_table
。
另请注意,您的问题的某些字面翻译是不必要的。