欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python類(lèi)屬性的延遲計(jì)算

 更新時(shí)間:2016年10月22日 10:15:09   作者:j_hao104  
這篇文章主要為大家詳細(xì)介紹了Python類(lèi)屬性的延遲計(jì)算,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

所謂類(lèi)屬性的延遲計(jì)算就是將類(lèi)的屬性定義成一個(gè)property,只在訪問(wèn)的時(shí)候才會(huì)計(jì)算,而且一旦被訪問(wèn)后,結(jié)果將會(huì)被緩存起來(lái),不用每次都計(jì)算。

優(yōu)點(diǎn)

構(gòu)造一個(gè)延遲計(jì)算屬性的主要目的是為了提升性能

實(shí)現(xiàn)

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

說(shuō)明

定義了一個(gè)延遲計(jì)算的裝飾器類(lèi)LazyProperty。Circle是用于測(cè)試的類(lèi),Circle類(lèi)有是三個(gè)屬性半徑(radius)、面積(area)、周長(zhǎng)(perimeter)。面積和周長(zhǎng)的屬性被LazyProperty裝飾,下面來(lái)試試LazyProperty的魔法:

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python排序算法之選擇排序

    python排序算法之選擇排序

    這篇文章主要介紹了python排序算法之選擇排序,選擇排序表示從無(wú)序的數(shù)組中,每次選擇最小或最大的數(shù)據(jù),從無(wú)序數(shù)組中放到有序數(shù)組的末尾,以達(dá)到排序的效果,需要的朋友可以參考下
    2023-04-04
  • Python實(shí)現(xiàn)通過(guò)繼承覆蓋方法示例

    Python實(shí)現(xiàn)通過(guò)繼承覆蓋方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)通過(guò)繼承覆蓋方法,結(jié)合實(shí)例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中采用子類(lèi)覆蓋父類(lèi)同名方法相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • python TKinter彈出式菜單的實(shí)例方法

    python TKinter彈出式菜單的實(shí)例方法

    在本篇文章里小編給大家整理了一篇關(guān)于python TKinter彈出式菜單的實(shí)例方法及相關(guān)代碼,有需要的朋友們可以學(xué)習(xí)下。
    2021-10-10
  • 淺析Python是如何實(shí)現(xiàn)集合的

    淺析Python是如何實(shí)現(xiàn)集合的

    之前我們介紹過(guò)字典的實(shí)現(xiàn)原理,它底層是基于哈希表實(shí)現(xiàn)的,而集合也是如此。本次我們來(lái)聊一下 Python 的集合是怎么實(shí)現(xiàn)的,希望對(duì)大家有所幫助
    2022-12-12
  • Python練習(xí)之操作MySQL數(shù)據(jù)庫(kù)

    Python練習(xí)之操作MySQL數(shù)據(jù)庫(kù)

    這篇文章主要介紹了Python練習(xí)之操作MySQL數(shù)據(jù)庫(kù),文章通過(guò)如何創(chuàng)建MySQL數(shù)據(jù)表?如何向MySQL表中插入數(shù)據(jù)?如何查詢(xún)MySQL中的數(shù)據(jù)?的三個(gè)問(wèn)題展開(kāi)了詳細(xì)的內(nèi)容介紹
    2022-06-06
  • 簡(jiǎn)析Python的閉包和裝飾器

    簡(jiǎn)析Python的閉包和裝飾器

    這篇文章主要為大家詳細(xì)介紹了Python的閉包和裝飾器,何為閉包?何為裝飾器?感興趣的小伙伴們可以參考一下
    2016-02-02
  • python定時(shí)任務(wù)apscheduler的詳細(xì)使用教程

    python定時(shí)任務(wù)apscheduler的詳細(xì)使用教程

    APScheduler的全稱(chēng)是Advanced?Python?Scheduler,它是一個(gè)輕量級(jí)的?Python定時(shí)任務(wù)調(diào)度框架,下面這篇文章主要給大家介紹了關(guān)于python定時(shí)任務(wù)apscheduler的詳細(xì)使用教程,需要的朋友可以參考下
    2022-02-02
  • python 內(nèi)置模塊詳解

    python 內(nèi)置模塊詳解

    模塊是一個(gè)保存了Python代碼的文件。模塊能定義函數(shù),類(lèi)和變量。模塊里也能包含可執(zhí)行的代碼,今天我們就來(lái)詳細(xì)探討下python內(nèi)置的一些常用模塊
    2019-01-01
  • Python使用future處理并發(fā)問(wèn)題方案詳解

    Python使用future處理并發(fā)問(wèn)題方案詳解

    從Python3.2引入的concurrent.futures模塊,Python2.5以上需要在pypi中安裝futures包。future指一種對(duì)象,表示異步執(zhí)行的操作。這個(gè)概念的作用很大,是concurrent.futures模塊和asyncio包的基礎(chǔ)
    2023-02-02
  • Python爬蟲(chóng)采集微博視頻數(shù)據(jù)

    Python爬蟲(chóng)采集微博視頻數(shù)據(jù)

    這篇文章主要介紹了利用Python爬蟲(chóng)采集微博的視頻數(shù)據(jù),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-12-12

最新評(píng)論