婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python 的lru_cache裝飾器使用簡介

Python 的lru_cache裝飾器使用簡介

熱門標簽:女王谷地圖標注 百應ai電銷機器人鄭州 廈門crm外呼系統如何 西藏快速地圖標注地點 長春人工智能電銷機器人官網 地圖標注推廣單頁 如何在地圖標注文字 ai地圖標注 n400電話申請多少錢

Python 的 lru_cache 裝飾器是一個為自定義函數提供緩存功能的裝飾器。其內部會在下次以相同參數調用該自定義函數時直接返回計算好的結果。通過緩存計算結果可以很好地提升性能。

1 從示例說起

假設我們有一個計算斐波那契數列的求和函數,其內部采用遞歸方式實現。

from xxx.clock_decorator import clock

@clock
def fibonacci(n):
 if n2:
  return n
 return fibonacci(n-2)+fibonacci(n-1)

if __name__=='__main__':
 logging.info('fibonacci(6) -> %s',fibonacci(6))

運行結果:

其中的 clock_decorator 實現是一個可以輸出某個函數運行時長的裝飾器1。

從輸出結果中可以看出,存在著嚴重的重復計算情況,比如 fibonacci(1) 就被計算了 5 次之多。這還只是計算 6 次的 fibonacci 函數。

2 優化

上面的示例代碼加入 lru_cache 裝飾器:

運行結果:

這次不存在重復計算現象,因此性能得到極大的提升。

3 比較

利用 cProfile 進行性能比較分析。它是一種確定性分析器,只測量 CPU 時間,并不包含內存消耗和其他與內存相關聯的信息2。

假設我們需要計算 fibonacci(33) 求和值。

(1)不使用 lru_cache 裝飾器

這個遞歸函數內部總共調用了 1000 多萬次的 fibonacci() 函數!

(2)使用了 lru_cache 裝飾器

使用了 lru_cache 裝飾器之后,這個遞歸函數只需調用 100 多次fibonacci() 函數!性能有了質的提升。

4 lru_cache 裝飾器

lru_cache 裝飾器支持兩個入參,它的完整定義格式為3: @functools.lru_cache(maxsize=128, typed=False)

參數  默認值  說明
maxsize  128  表示緩存大小。如果設置為 None,則不限大小;如果超過緩存大小,則使用 LRU 策略清理緩存。緩存的大小限制可確保緩存不會無限制增長。LRU(Least Recently Used),即刪除最近最少使用的緩存數據。
typed  False  如果為true,不同類型的參數將會被分別緩存,比如區分浮點數與整型。
注意:由于使用了字典來存儲緩存,所以所裝飾的函數參數必須是可哈希的。
利用 cache_info() 函數,我們還可以看到命中次數 hits,未命中次數 misses ,最大緩存數量 maxsize 和 當前緩存大小 currsize。使用方式是直接調用被裝飾函數的 cache_info(),形如:fibonacci.cache_info())。

只要某個函數遞歸調用并存在重復計算的情況,這時就要記著使用 lru_cache 這個性能加速器。

以上就是Python 的lru_cache 裝飾器使用簡介的詳細內容,更多關于Python 的lru_cache 裝飾器的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Python中lru_cache的使用和實現詳解
  • Python實現的一個簡單LRU cache
  • python自帶緩存lru_cache用法及擴展的使用

標簽:綿陽 廊坊 拉薩 內江 黔東 亳州 興安盟 渭南

巨人網絡通訊聲明:本文標題《Python 的lru_cache裝飾器使用簡介》,本文關鍵詞  Python,的,lru,cache,裝飾,器,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python 的lru_cache裝飾器使用簡介》相關的同類信息!
  • 本頁收集關于Python 的lru_cache裝飾器使用簡介的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 衡阳县| 岚皋县| 长兴县| 滕州市| 汾阳市| 涿州市| 神木县| 花莲县| 成都市| 深泽县| 乌审旗| 宁海县| 铜梁县| 买车| 博白县| 海南省| 密山市| 安庆市| 呼和浩特市| 且末县| 新乡县| 赤城县| 江川县| 监利县| 来宾市| 老河口市| 新营市| 同江市| 梅州市| 贵德县| 舞钢市| 建水县| 张掖市| 凉城县| 靖远县| 龙泉市| 深水埗区| 景德镇市| 衡东县| 昌黎县| 华蓥市|