Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:创建一个用于记忆函数的函数装饰器_Python - Fatal编程技术网

Python:创建一个用于记忆函数的函数装饰器

Python:创建一个用于记忆函数的函数装饰器,python,Python,在这个函数中,我要做的是创建一个本地表,并将带有查找的函数包装到表中,如果需要计算,则存储结果。这应该适用于任何函数,只要它只使用可散列参数调用。确保支持任意数量的位置参数和关键字参数。我们不能使用全局表 这将像以下那样使用: @memoize def fib(n): if n > 1: return fib(n-1) + fib(n-2) else: return n 有人能给我一些提示吗> def memoize(f): loc

在这个函数中,我要做的是创建一个本地表,并将带有查找的函数包装到表中,如果需要计算,则存储结果。这应该适用于任何函数,只要它只使用可散列参数调用。确保支持任意数量的位置参数和关键字参数。我们不能使用全局表

这将像以下那样使用:

@memoize
def fib(n):
    if n > 1:
        return fib(n-1) + fib(n-2)
    else:
        return n
有人能给我一些提示吗>

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中的本地函数,除非您为它提供访问本地_表的其他方式


还要注意的是,一些问题的直译是不必要的。

这是装饰师的标准例子之一,你有没有做过任何研究?谷歌搜索两秒钟就可以了。你说你做了多少研究?如果你在Python3上,你可以使用。或者这是某种家庭作业?确保支持任意数量的位置参数和关键字参数。当你把作业改写成一个问题的时候,重写那些听起来像是你打算给我们打分的部分可能是个好主意,因为我们大多数人都不想从你那里拿一门课。