• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python性能提升之延迟初始化

Python性能提升之延迟初始化

作者:hebedich 字体:[增加 减小] 来源:互联网

hebedich 通过本文主要向大家介绍了python性能,python性能测试,python性能分析与优化,高性能python,python高性能编程 pdf等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

property

在切入正题之前,我们了解下property的用法,property可以将属性的访问转变成方法的调用。

class Circle(object): 
 def __init__(self, radius): 
  self.radius = radius 
  
 @property
 def area(self): 
  return 3.14 * self.radius ** 2
  
c = Circle(4) 
print c.radius 
print c.area
</div>

可以看到,area虽然是定义成一个方法的形式,但是加上@property后,可以直接执行c.area,当成属性访问。

现在问题来了,每次调用c.area,都会计算一次,太浪费cpu了,怎样才能只计算一次呢?这就是lazy 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

</div>

说明

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

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

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

</div>

您可能想查找下面的文章:

  • Python性能提升之延迟初始化
  • Python 性能优化技巧总结
  • python 性能提升的几种方法
  • Python实现测试磁盘性能的方法
  • Python性能优化技巧
  • Python 代码性能优化技巧分享
  • Python 代码性能优化技巧分享

相关文章

  • Python批量重命名同一文件夹下文件的方法
  • 在Python中操作时间之mktime()方法的使用教程
  • python脚本内运行linux命令的方法
  • 在Python中操作字典之fromkeys()方法的使用
  • 低版本中Python除法运算小技巧
  • 解析Mac OS下部署Pyhton的Django框架项目的过程
  • 利用Python学习RabbitMQ消息队列
  • 详解python调度框架APScheduler使用
  • python读取word文档的方法
  • 探究Python的Tornado框架对子域名和泛域名的支持

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python中字典创建、遍历、添加等实用操作技巧合集
    • 在Python中marshal对象序列化的相关知识
    • Python脚本判断 Linux 是否运行在虚拟机上
    • Django卸载之后重新安装的方法
    • 使用Python读写文本文件及编写简单的文本编辑器
    • python正则表达式中的括号匹配问题
    • 使用Python操作Elasticsearch数据索引的教程
    • 简介二分查找算法与相关的Python实现示例
    • Python threading多线程编程实例
    • python使用递归解决全排列数字示例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有