Python方法的延迟加载的示例代码

yipeiwu_com5年前Python基础

数据挖掘的过程中,数据进行处理是一重要的环节,我们往往会将其封装成一个方法,而有的时候这一个方法可能会被反复调用,每一次都对数据进行处理这将是一个很耗时耗资源的操纵,那么有没有办法将计算后的结果 缓存 起来达到 调用一次,处处运行 的效果,经过一番研究在 lazy_object_proxy/utils.py 中发现了一段代码,详见lazy_object_proxy

class cached_property(object):
  def__init__(self, func):
    self.func = func

  def__get__(self, obj, cls):
    if obj is None:
      return self
    value = obj.__dict__[self.func.__name__] = self.func(obj)
    return value

那么之后该怎么使用呢?下面给出了一个简单的例子:

class Test(object):
  def__init__(self,value):
    self.value = value;
@cached_property
  def display(self):
    #create expensive object
    print "some complicated compute here"
    return self.value

下面是结果

>> t = Test(1000)
>>t.display
some complicated compute here
1000
>>t.display
1000

从上面结果可以看出,只打印出了一次 some complicated compute here ,即只调用了一次,也就达到了我们的目的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

python 通过视频url获取视频的宽高方式

这里其实是通过获取视频截图的方式获得大小的 下面列举两个小demo import cv2 #引入模块 获取视频截图的 from PIL import Image #引入模块 获取...

Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)

Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)

PyQt5相关安装 python 版本 python 3.6.3 1、安装PyQt5 执行命令: pip install pyqt5 2、安装PyQt5-tools 执行命令:pip...

python射线法判断一个点在图形区域内外

用python 实现的代码:判断一个点在图形区域内外,供大家参考,具体内容如下 # -*-encoding:utf-8 -*- # file:class.py # """ 信息...

在python中将字符串转为json对象并取值的方法

如下所示: string =" { "status": "error", "messages": ["Could not find resource or operation '...

python ElementTree 基本读操作示例

示例可以附件中下载 1.加载xml文件 加载XML文件共有2种方法,一是加载指定字符串,二是加载指定文件 2.获取element的方法 a) 通过getiterator b) 过 get...