以下装饰器会记忆传递给它的函数。我不明白这个装饰器的第一行是做什么的。如果不保证它存在,如何为 def memoize(obj):
cache = obj.cache = {}
@functools.wraps(obj)
def memoizer(*args, **kwargs):
if args not in cache:
cache[args] = obj(*args, **kwargs)
return cache[args]
return memoizer
分配值?
{{1}}
答案 0 :(得分:2)
从评论中看来,您的问题似乎与多项任务没有任何关系。您只是想知道如果obj.cache = {}
没有名为obj
的属性,cache
如何运作。
答案是在Python中,属性不需要预先声明。除非您特别为您的类编码以限制更多,否则您可以随时在任何用户定义的类的任何实例上分配任何属性。如果该属性尚不存在,则将使用新值创建该属性。
答案 1 :(得分:0)
在Python中,设置不存在的属性会创建该属性。我认为大多数动态语言都是这样的。因此,cache = obj.cache = {}
会在cache
上创建属性obj
,并将其设置为{}
。