python 使用Python装饰器进行Memoize
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 使用Python装饰器进行Memoize相关的知识,希望对你有一定的参考价值。
# -*- coding: utf-8 -*-
from functools import wraps
def memoize(obj):
"""
From Python Decorator Library
"""
cache = obj.cache = {}
@wraps(obj)
def memoizer(*args, **kwargs):
key = str(args) + str(kwargs)
if key not in cache:
cache[key] = obj(*args, **kwargs)
return cache[key]
return memoizer
def memoize_method(obj):
"""
memoize class method adding a property to the class instance
"""
@wraps(obj)
def memoizer(*args, **kwargs):
instance = args[0]
cache_method = '_{}_cache'.format(obj.__name__)
key = args[1:] + tuple(sorted(kwargs.items()))
if not hasattr(instance, cache_method):
setattr(instance, cache_method, {})
_cache = getattr(instance, cache_method)
if key not in _cache:
_cache[key] = obj(*args, **kwargs)
return _cache[key]
return memoizer
以上是关于python 使用Python装饰器进行Memoize的主要内容,如果未能解决你的问题,请参考以下文章
python装饰器的使用
python 通过在Python中使用装饰器进行尾递归优化
python 通过在Python中使用装饰器进行尾递归优化
python 通过在Python中使用装饰器进行尾递归优化
python 通过在Python中使用装饰器进行尾递归优化
python 通过在Python中使用装饰器进行尾递归优化