最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 的lru_cache裝飾器使用簡介

 更新時(shí)間:2021年03月15日 10:37:14   作者:deniro  
這篇文章主要介紹了Python 的lru_cache 裝飾器使用簡介,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下

Python 的 lru_cache 裝飾器是一個(gè)為自定義函數(shù)提供緩存功能的裝飾器。其內(nèi)部會(huì)在下次以相同參數(shù)調(diào)用該自定義函數(shù)時(shí)直接返回計(jì)算好的結(jié)果。通過緩存計(jì)算結(jié)果可以很好地提升性能。

1 從示例說起

假設(shè)我們有一個(gè)計(jì)算斐波那契數(shù)列的求和函數(shù),其內(nèi)部采用遞歸方式實(shí)現(xiàn)。

from xxx.clock_decorator import clock

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

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

運(yùn)行結(jié)果:

其中的 clock_decorator 實(shí)現(xiàn)是一個(gè)可以輸出某個(gè)函數(shù)運(yùn)行時(shí)長的裝飾器1。

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

2 優(yōu)化

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

運(yùn)行結(jié)果:

這次不存在重復(fù)計(jì)算現(xiàn)象,因此性能得到極大的提升。

3 比較

利用 cProfile 進(jìn)行性能比較分析。它是一種確定性分析器,只測(cè)量 CPU 時(shí)間,并不包含內(nèi)存消耗和其他與內(nèi)存相關(guān)聯(lián)的信息2。

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

(1)不使用 lru_cache 裝飾器

這個(gè)遞歸函數(shù)內(nèi)部總共調(diào)用了 1000 多萬次的 fibonacci() 函數(shù)!

(2)使用了 lru_cache 裝飾器

使用了 lru_cache 裝飾器之后,這個(gè)遞歸函數(shù)只需調(diào)用 100 多次fibonacci() 函數(shù)!性能有了質(zhì)的提升。

4 lru_cache 裝飾器

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

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

只要某個(gè)函數(shù)遞歸調(diào)用并存在重復(fù)計(jì)算的情況,這時(shí)就要記著使用 lru_cache 這個(gè)性能加速器。

以上就是Python 的lru_cache 裝飾器使用簡介的詳細(xì)內(nèi)容,更多關(guān)于Python 的lru_cache 裝飾器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python使用clear方法清除字典內(nèi)全部數(shù)據(jù)實(shí)例

    python使用clear方法清除字典內(nèi)全部數(shù)據(jù)實(shí)例

    這篇文章主要介紹了python使用clear方法清除字典內(nèi)全部數(shù)據(jù),實(shí)例分析了Python中clear方法清空字典內(nèi)數(shù)據(jù)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • python Boltons庫實(shí)用功能探索(深度復(fù)制類型檢查重試機(jī)制)

    python Boltons庫實(shí)用功能探索(深度復(fù)制類型檢查重試機(jī)制)

    這篇文章主要為大家介紹了python Boltons庫實(shí)用功能探索包含深度復(fù)制類型檢查重試機(jī)制及數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 利用pyinstaller打包exe文件的基本教程

    利用pyinstaller打包exe文件的基本教程

    這篇文章主要給大家介紹了關(guān)于利用pyinstaller打包exe文件的基本方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用pyinstaller具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python如何寫try語句

    python如何寫try語句

    在本篇文章里小編給大家整理的是一篇關(guān)于python寫try語句的方法相關(guān)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2020-07-07
  • Python保存dict字典類型數(shù)據(jù)到Mysql并自動(dòng)創(chuàng)建表與列

    Python保存dict字典類型數(shù)據(jù)到Mysql并自動(dòng)創(chuàng)建表與列

    這篇文章主要介紹了Python保存dict字典類型數(shù)據(jù)到Mysql并自動(dòng)創(chuàng)建表與列,字典是另一種可變?nèi)萜髂P?,且可存?chǔ)任意類型對(duì)象,想了解更多內(nèi)容的小伙伴可以和小編一起進(jìn)入下面文章學(xué)習(xí)更多內(nèi)容,希望對(duì)你有所幫助
    2022-02-02
  • python基礎(chǔ)之迭代器與生成器

    python基礎(chǔ)之迭代器與生成器

    這篇文章主要為大家介紹了python迭代器與生成器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • python pyecharts 實(shí)現(xiàn)一個(gè)文件繪制多張圖

    python pyecharts 實(shí)現(xiàn)一個(gè)文件繪制多張圖

    這篇文章主要介紹了python pyecharts 實(shí)現(xiàn)一個(gè)文件繪制多張圖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python操作Mongodb數(shù)據(jù)庫的方法小結(jié)

    Python操作Mongodb數(shù)據(jù)庫的方法小結(jié)

    這篇文章主要介紹了Python操作Mongodb數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式總結(jié)分析了Python針對(duì)MongoDB數(shù)據(jù)庫的基本模塊導(dǎo)入、連接、增刪改查及排序等相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • 解決pycharm最左側(cè)Tool Buttons顯示不全的問題

    解決pycharm最左側(cè)Tool Buttons顯示不全的問題

    今天小編就為大家分享一篇解決pycharm最左側(cè)Tool Buttons顯示不全的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 解決python中用matplotlib畫多幅圖時(shí)出現(xiàn)圖形部分重疊的問題

    解決python中用matplotlib畫多幅圖時(shí)出現(xiàn)圖形部分重疊的問題

    今天小編就為大家分享一篇解決python中用matplotlib畫多幅圖時(shí)出現(xiàn)圖形部分重疊的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07

最新評(píng)論

洞口县| 修文县| 建昌县| 揭东县| 辰溪县| 修武县| 苍梧县| 侯马市| 象山县| 宜春市| 屏东市| 长子县| 陈巴尔虎旗| 海林市| 十堰市| 山东省| 锦州市| 巨鹿县| 邢台市| 富平县| 赤壁市| 札达县| 巴中市| 大余县| 托克托县| 兴安盟| 金昌市| 菏泽市| 淮南市| 平泉县| 双桥区| 达拉特旗| 新巴尔虎左旗| 肥西县| 扎囊县| 合肥市| 西昌市| 东乡| 商丘市| 阿鲁科尔沁旗| 安国市|