国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python類屬性的延遲計算

2019-11-25 16:31:07
字體:
來源:轉載
供稿:網友

所謂類屬性的延遲計算就是將類的屬性定義成一個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 valueimport mathclass 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.areaComputing area12.5663706144>>> print c.area12.5663706144

在area()中每計算一次就會打印一次“Computing area”,而連續調用兩次c.area后“Computing area”只被打印了一次。這得益于LazyProperty,只要調用一次后,無論后續調用多少次都不會重復計算。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安达市| 彰化市| 普陀区| 吕梁市| 孟州市| 绥宁县| 县级市| 老河口市| 泗阳县| 墨脱县| 太原市| 鄱阳县| 龙里县| 晋江市| 梁山县| 桃源县| 东平县| 湾仔区| 子洲县| 乐山市| 阿鲁科尔沁旗| 拉萨市| 荣成市| 宣威市| 宿松县| 射洪县| 宜君县| 大丰市| 名山县| 博白县| 田东县| 雷州市| 伊宁县| 洛扎县| 古交市| 新化县| 三江| 安国市| 宁德市| 赤水市| 清徐县|