真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

計(jì)算速度太慢?試試 lru_cache 裝飾器

眾所周知,python語言是相當(dāng)好用的,但是它的執(zhí)行性能也是相對(duì)其他語言比較慢的。還好python提供了一個(gè)非常優(yōu)秀的裝飾器來解決這個(gè)問題,它就是lru_cache裝飾器。lru_cache是通過著名的LCU算法來實(shí)現(xiàn)的,也就是最近最久未使用緩存淘汰算法。

創(chuàng)新互聯(lián)建站主營(yíng)平城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),平城h5微信平臺(tái)小程序開發(fā)搭建,平城網(wǎng)站營(yíng)銷推廣歡迎平城等地區(qū)企業(yè)咨詢

【閱讀全文】

為了形成明顯的對(duì)比,使用普通的方式來實(shí)現(xiàn)一個(gè)函數(shù)的遞歸過程,即不添加任何的裝飾器來實(shí)現(xiàn)。

def func(n):
    '''
    遞歸樣例函數(shù)、未添加lru_cache裝飾器
    :param n:
    :return:
    '''
    if n <= 1:
        return n
    return func(n - 1) + func(n - 2)

接下來,再使用 lru_cache 裝飾器的方式實(shí)現(xiàn)一遍,首先,導(dǎo)入需要裝飾器模塊。

from functools import lru_cache

過程比較簡(jiǎn)單,這樣準(zhǔn)備工作就完成。然后,在代碼塊中直接引用即可。

@lru_cache
def func(n):
    '''
    遞歸樣例函數(shù)、添加lru_cache裝飾器
    :param n:
    :return:
    '''
    if n <= 1:
        return n
    return func(n - 1) + func(n - 2)

如上述代碼所示,只需要在函數(shù)定義的部分加入裝飾器的修飾大功告成了。

最后,只需要寫一個(gè)main函數(shù)分別調(diào)用這兩個(gè)函數(shù)就會(huì)出現(xiàn)顯而易見的效果。

import time

'''
測(cè)試消耗時(shí)間
'''
if __name__ == '__main__':
    start_time = time.time()
    result = func(10)
    end_time = time.time()
    cost_time = end_time - start_time
    print('result is ' + str(result),'cost_time is ' + str(cost_time))

通過上面@lru_cache的使用實(shí)例,可以清楚的發(fā)現(xiàn)cost_time is 0.0,時(shí)間上的消耗基本可以忽略不計(jì)。而在不使用此裝飾器的情況下運(yùn)算了半天都沒有出來結(jié)果,效果是顯而易見的。

@lru_cache 裝飾器使用大致來講就是將每次遞歸計(jì)算的數(shù)據(jù)結(jié)果作為 hash 緩存記錄,當(dāng)再次需要這個(gè)結(jié)果的時(shí)候就直接從緩存的數(shù)據(jù)中將結(jié)果取出避免重復(fù)計(jì)算的性能消耗。它的底層實(shí)現(xiàn)也牽扯到雙向鏈表、hash表等實(shí)現(xiàn)處理過程,更深層次的LCU算法原理大家可以學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)+算法的一些常規(guī)知識(shí)。

【往期推薦】

冒泡排序、選擇排序之間的比較與代碼實(shí)現(xiàn)!

如何通過pynput與日志記錄實(shí)現(xiàn)鍵盤、鼠標(biāo)的監(jiān)聽行為?

如果你是一名java程序員,面對(duì)已經(jīng)寫好的python腳本該如何調(diào)用,其實(shí)很簡(jiǎn)單!

如何使用PyQt5一步步實(shí)現(xiàn)用戶登錄GUI界面、登錄后跳轉(zhuǎn)?

辦公自動(dòng)化:幾行代碼將PDF文檔轉(zhuǎn)換為WORD文檔(代碼實(shí)戰(zhàn))!


文章題目:計(jì)算速度太慢?試試 lru_cache 裝飾器
標(biāo)題路徑:http://weahome.cn/article/dsojsoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部