Python类属性的延迟计算


Posted in Python onOctober 22, 2016

所谓类属性的延迟计算就是将类的属性定义成一个property,只在访问的时候才会计算,而且一旦被访问后,结果将会被缓存起来,不用每次都计算。

优点

构造一个延迟计算属性的主要目的是为了提升性能

实现

class LazyProperty(object):
  def __init__(self, func):
    self.func = func

  def __get__(self, instance, owner):
    if instance is None:
      return self
    else:
      value = self.func(instance)
      setattr(instance, self.func.__name__, value)
      return value


import math


class Circle(object):
  def __init__(self, radius):
    self.radius = radius

  @LazyProperty
  def area(self):
    print 'Computing area'
    return math.pi * self.radius ** 2

  @LazyProperty
  def perimeter(self):
    print 'Computing perimeter'
    return 2 * math.pi * self.radius

说明

定义了一个延迟计算的装饰器类LazyProperty。Circle是用于测试的类,Circle类有是三个属性半径(radius)、面积(area)、周长(perimeter)。面积和周长的属性被LazyProperty装饰,下面来试试LazyProperty的魔法:

>>> c = Circle(2)
>>> print c.area
Computing area
12.5663706144
>>> print c.area
12.5663706144

在area()中每计算一次就会打印一次“Computing area”,而连续调用两次c.area后“Computing area”只被打印了一次。这得益于LazyProperty,只要调用一次后,无论后续调用多少次都不会重复计算。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python抓取某汽车网数据解析html存入excel示例
Dec 04 Python
python DataFrame 修改列的顺序实例
Apr 10 Python
对python3 urllib包与http包的使用详解
May 10 Python
浅谈Python 多进程默认不能共享全局变量的问题
Jan 11 Python
numpy中的ndarray方法和属性详解
May 27 Python
浅谈Pandas Series 和 Numpy array中的相同点
Jun 28 Python
Python绘制频率分布直方图的示例
Jul 08 Python
pandas read_excel()和to_excel()函数解析
Sep 19 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
jupyter notebook 多环境conda kernel配置方式
Apr 10 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
python 机器学习的标准化、归一化、正则化、离散化和白化
Apr 16 Python
如何在Python函数执行前后增加额外的行为
Oct 20 #Python
如何利用Fabric自动化你的任务
Oct 20 #Python
windows下ipython的安装与使用详解
Oct 20 #Python
Python做文本按行去重的实现方法
Oct 19 #Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 #Python
python类中super()和__init__()的区别
Oct 18 #Python
Python 序列的方法总结
Oct 18 #Python
You might like
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
google地图的路线实现代码
2009/08/20 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
2017/10/23 Javascript
vue 实现边输入边搜索功能的实例讲解
2018/09/16 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
Python中运行并行任务技巧
2015/02/26 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
python实现支付宝转账接口
2019/05/07 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
html5教程画矩形代码分享
2013/12/04 HTML / CSS
海外淘书首选:AbeBooks
2017/07/31 全球购物
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
社区中秋节活动方案
2014/01/29 职场文书
公路绿化方案
2014/05/12 职场文书
工地安全标语
2014/06/07 职场文书
课外活动总结范文
2014/07/09 职场文书
中国梦读书活动总结
2014/07/10 职场文书
Python可视化学习之seaborn调色盘
2022/02/24 Python
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python