我們即將學(xué)習(xí)的是:在Python中實(shí)現(xiàn)更簡(jiǎn)單好用的函數(shù)運(yùn)算緩存。 函數(shù)運(yùn)算緩存,顧名思義就是我們可以針對(duì)指定的函數(shù),讓其記住過(guò)往參數(shù)輸入和返回結(jié)果,使得后續(xù)接收到相同的參數(shù)時(shí)跳過(guò)函數(shù)運(yùn)算,直接返回已緩存的結(jié)果值。 很多朋友應(yīng)該知道Python標(biāo)準(zhǔn)庫(kù)里functools.lru_cache可以做函數(shù)運(yùn)算緩存,但是它的功能實(shí)在是太簡(jiǎn)陋了,像過(guò)期時(shí)間設(shè)置之類(lèi)的功能都沒(méi)有。 而我們可以使用第三方庫(kù)cachier來(lái)代替,它的基本使用方式非常簡(jiǎn)單,使用pip install cachier完成安裝后,我們來(lái)看一個(gè)簡(jiǎn)單的示例: 這里我們定義一個(gè)具有一定運(yùn)算耗時(shí)的函數(shù),利用cachier.cachier()裝飾,并利用參數(shù)stale_after設(shè)置緩存到期時(shí)間為10秒:
importtime fromcachierimportcachier fromdatetimeimporttimedelta @cachier(stale_after=timedelta(seconds=10)) defdemo(x:int,y:int): time.sleep(2) returnx*y foriinrange(10): print('-'*50) print(f'第{i+1}次執(zhí)行') start=time.time() demo(1,1) print(f'耗時(shí){round(time.time()-start,2)}秒') time.sleep(2)過(guò)程打印記錄如下:
可以觀(guān)察到,我們的函數(shù)按照設(shè)定好的過(guò)期時(shí)間進(jìn)行著緩存。除此之外,cachier還有很多其他實(shí)用特性,譬如基于mongodb實(shí)現(xiàn)分布式存儲(chǔ)等,你可以前往其官方倉(cāng)庫(kù)查看詳細(xì)文檔說(shuō)明:https://github.com/shaypal5/cachier
-
存儲(chǔ)
+關(guān)注
關(guān)注
13文章
4745瀏覽量
89785 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4413瀏覽量
67201 -
python
+關(guān)注
關(guān)注
57文章
4867瀏覽量
89803
原文標(biāo)題:Python 中更好用的函數(shù)運(yùn)算緩存
文章出處:【微信號(hào):AI科技大本營(yíng),微信公眾號(hào):AI科技大本營(yíng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Python常用自增運(yùn)算寫(xiě)法
請(qǐng)問(wèn)Python中如何實(shí)現(xiàn)vlookup函數(shù)的功能?
如何使用LUA腳本在串口屏中實(shí)現(xiàn)簡(jiǎn)單的邏輯運(yùn)算以及字符處理
python函數(shù)概念理解
python運(yùn)算符是什么
抽樣在Python中是如何實(shí)現(xiàn)的
推薦一個(gè)Python超級(jí)好用的內(nèi)置函數(shù)lambda
在Python中實(shí)現(xiàn)更簡(jiǎn)單好用的函數(shù)運(yùn)算緩存
評(píng)論