如何在decorator中注册它所装饰的所有函数?

2024-05-12 04:37:13 发布

您现在位置:Python中文网/ 问答频道 /正文

假设你有下面的装饰师。如何将它修改为附加到一些列表中引用它所装饰的所有函数?在

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

@memoize
def foo(bar):
    return bar ** 3

Tags: 函数objcache列表returndefbarargs
1条回答
网友
1楼 · 发布于 2024-05-12 04:37:13

您可以轻松地将列表存储在decorator函数对象(memoize.decorated)上:

^{1}$

它的用途如下:

^{pr2}$

作为一个补充说明,您应该考虑存储^{}s in the list,以避免内存泄漏或对象在没有其他“真正”引用时无法释放。在

相关问题 更多 >