栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

记住硬币找零

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记住硬币找零

当您可以只使用通用的预先编写的装饰器时,不必编写专门的记忆装饰器。例如,直接来自
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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/624398.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号