溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python如何利用自帶的緩存機制提高效率

發(fā)布時間:2022-03-16 15:00:25 來源:億速云 閱讀:213 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細講解有關(guān)python如何利用自帶的緩存機制提高效率,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

利用自帶的緩存機制提高效率

緩存是一種將定量數(shù)據(jù)加以保存,以備迎合后續(xù)獲取需求的處理方式,旨在加快數(shù)據(jù)獲取的速度。

數(shù)據(jù)的生成過程可能需要經(jīng)過計算,規(guī)整,遠程獲取等操作,如果是同一份數(shù)據(jù)需要多次使用,每次都重新生成會大大浪費時間。所以,如果將計算或者遠程請求等操作獲得的數(shù)據(jù)緩存下來,會加快后續(xù)的數(shù)據(jù)獲取需求。

為了實現(xiàn)這個需求,Python 3.2 + 中給我們提供了一個機制,可以很方便的實現(xiàn),而不需要你去寫這樣的邏輯代碼。

這個機制實現(xiàn)于 functool 模塊中的 lru_cache 裝飾器。

@functools.lru_cache(maxsize=None, typed=False)

參數(shù)解讀:

  • maxsize:最多可以緩存多少個此函數(shù)的調(diào)用結(jié)果,如果為None,則無限制,設(shè)置為 2 的冪時,性能最佳

  • typed:若為 True,則不同參數(shù)類型的調(diào)用將分別緩存。

舉個例子

from functools import lru_cache  @lru_cache(None) def add(x, y):     print("calculating: %s + %s" % (x, y))     return x + y  print(add(1, 2)) print(add(1, 2)) print(add(2, 3))

輸出如下,可以看到第二次調(diào)用并沒有真正的執(zhí)行函數(shù)體,而是直接返回緩存里的結(jié)果

calculating: 1 + 2 3 3 calculating: 2 + 3 5

下面這個是經(jīng)典的斐波那契數(shù)列,當(dāng)你指定的 n 較大時,會存在大量的重復(fù)計算

def fib(n):     if n < 2:         return n     return fib(n - 2) + fib(n - 1)

第六點介紹的 timeit,現(xiàn)在可以用它來測試一下到底可以提高多少的效率。

不使用 lru_cache 的情況下,運行時間 31 秒

import timeit  def fib(n):     if n < 2:         return n     return fib(n - 2) + fib(n - 1)    print(timeit.timeit(lambda :fib(40), number=1)) # output: 31.2725698948

由于使用了 lru_cache 后,運行速度實在太快了,所以我將 n 值由 30 調(diào)到 500,可即使是這樣,運行時間也才 0.0004  秒。提高速度非常顯著。

import timeit from functools import lru_cache  @lru_cache(None) def fib(n):     if n < 2:         return n     return fib(n - 2) + fib(n - 1)  print(timeit.timeit(lambda :fib(500), number=1)) # output: 0.0004921059880871326

關(guān)于“python如何利用自帶的緩存機制提高效率”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI