记住硬币找零

记住硬币找零,第1张

记住硬币找零

当您可以只使用通用的预先编写的装饰器时,不必编写专门的记忆装饰器。例如,直接来自
PythonDecoratorLibrary

的以下 代码

import collectionsimport functoolsclass memoized(object):   '''Decorator. Caches a function's return value each time it is called.   If called later with the same arguments, the cached value is returned   (not reevaluated).   '''   def __init__(self, func):      self.func = func      self.cache = {}   def __call__(self, *args):      if not isinstance(args, collections.Hashable):         # uncacheable. a list, for instance.         # better to not cache than blow up.         return self.func(*args)      if args in self.cache:         return self.cache[args]      else:         value = self.func(*args)         self.cache[args] = value         return value   def __repr__(self):      '''Return the function's docstring.'''      return self.func.__doc__   def __get__(self, obj, objtype):      '''Support instance methods.'''      return functools.partial(self.__call__, obj)

然后可以将其应用于

change()
函数(或其他函数,因为它是通用的),如下所示:

@memoizeddef change(a, kinds=(50, 20, 10, 5, 1)):    if a == 0:        return 1    if a < 0 or len(kinds) == 0:        return 0    return change(a - kinds[0], kinds) + change(a, kinds[1:])print(change(10))  # 4


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5630434.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存