这是Alex Martelli Python Cookbook中的示例,展示了如何使用cPickle为带有可变参数(
原始版本 )的函数创建备忘录装饰器:
import cPickleclass MemoizeMutable: def __init__(self, fn): self.fn = fn self.memo = {} def __call__(self, *args, **kwds): import cPickle str = cPickle.dumps(args, 1)+cPickle.dumps(kwds, 1) if not self.memo.has_key(str): print "miss" # DEBUG INFO self.memo[str] = self.fn(*args, **kwds) else: print "hit" # DEBUG INFO return self.memo[str]这是一个链接。
编辑: 使用您给定的代码和此备忘录装饰器:
_level = MemoizeMutable(_level)equirements = {'a': [], 'b': [], 'c': ['a'], 'd': ['a','b'], 'e': ['c','d'], 'f': ['e'] }print uses_hierarchy(equirements)我能够重现此:
missmisshitmissmisshitmisshithithitmisshit{0: ['a', 'b'], 1: ['c', 'd'], 2: ['e'], 3: ['f']}


