加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

【Python】python 中 的 memoize 和 memoized

发布时间:2020-12-17 01:22:28 所属栏目:Python 来源:网络整理
导读:python 中编写递归函数时,为减少计算时间,需要用到 memoize 或 memoized 功能。 它们的作用是:记忆函数每次运行的结果,当递归函数每次递归时,若已经计算过子函数,就直接从记忆中的结果获取,避免重复计算。 在使用这个功能时,一般在程序前面加个 memo

python 中编写递归函数时,为减少计算时间,需要用到 memoize 或 memoized 功能。

它们的作用是:记忆函数每次运行的结果,当递归函数每次递归时,若已经计算过子函数,就直接从记忆中的结果获取,避免重复计算。

在使用这个功能时,一般在程序前面加个 memoized 的类(这个类可以直接复制别人写好的代码)就行,然后在定义递归函数时前面加上 @memoized

例如斐波那契函数,没有使用 memoized 功能的计算时间为 41 秒,使用后计算时间为 0秒。。

memoized 类的代码(decorator.py):

<pre class="has">
import collections
import functools

class 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)</code></pre>

使用:

<pre class="has">
#coding: utf-8
from decorators import memoized
def myclass(object):
@memoized
def init(a,b):
return a+b

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读