熱線電話:13121318867

登錄
首頁精彩閱讀Python類屬性的延遲計算
Python類屬性的延遲計算
2018-06-20
收藏

Python類屬性的延遲計算

所謂類屬性的延遲計算就是將類的屬性定義成一個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,只要調用一次后,無論后續調用多少次都不會重復計算。
以上就是本文的全部內容,希望對大家的學習有所幫助

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢