【Python技巧】巧妙地使用參數(shù)來(lái)緩存重復(fù)計(jì)算的數(shù)據(jù)

先舉一個(gè)很簡(jiǎn)單的例子, 一個(gè)函數(shù)接收兩個(gè)參數(shù),返回這兩個(gè)參數(shù)的和。

def add(a, b):
    return a + b

def main():
    print(add(1, 2))
    print(add(3, 4))
    print(add(1, 2))
    print(add(3, 4))

if __name__ == '__main__':
    main()

我們對(duì)1和2,3和4分別進(jìn)行了兩次計(jì)算,那么add函數(shù)每次都會(huì)進(jìn)行計(jì)算,然后返回值,如果可以發(fā)現(xiàn)1和2被計(jì)算過(guò)了,以后再調(diào)用1和2求和的話,能直接使用計(jì)算好的值是最好的,而不用重新計(jì)算(如果計(jì)算過(guò)程復(fù)雜耗時(shí)較長(zhǎng)的情況下,這是非常有用的方式,這里只是簡(jiǎn)單的進(jìn)行了求和計(jì)算,計(jì)算量較少)。

看一下我們的改進(jìn)方式:

def add(a, b, __cache={}):
    if (a, b) in __cache:
        return __cache[(a, b)]

    ret = a + b
    __cache[(a, b)] = ret
    return ret


def main():
    print(add(1, 2))
    print(add(3, 4))
    print(add(1, 2))
    print(add(3, 4))


if __name__ == '__main__':
    main()

我們對(duì)add函數(shù)增加了一個(gè)字典參數(shù),大家都知道,任何調(diào)用如果對(duì)這個(gè)字典進(jìn)行了修改,這個(gè)字典會(huì)一直有效的。
比如第一次調(diào)用add(1, 2)的時(shí)候:

if (a, b) in __cache:
        return __cache[(a, b)]

(a, b)也就是1和2組成的元組這個(gè)key不存在于字典__cache中,那么會(huì)執(zhí)行后面的計(jì)算,并且把計(jì)算結(jié)果以字典的方式存在__cache中,其中key是參數(shù)組成的元組,value是計(jì)算后的值,然后返回計(jì)算后的值,同理3和4的計(jì)算類似,那下一次再遇見(jiàn)add(1, 2)的時(shí)候:

if (a, b) in __cache:
        return __cache[(a, b)]

發(fā)現(xiàn)(a, b)是存在于__cache中的,我們直接返回已經(jīng)計(jì)算好的值即可,而不用重新計(jì)算(如果計(jì)算量較大,這會(huì)非常好用)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 30,282評(píng)論 8 265
  • 之前解決了,點(diǎn)擊登錄無(wú)反應(yīng)的 ShareSDK 問(wèn)題,今天又碰到了點(diǎn)擊登陸后回調(diào)的 SSDKResponseSta...
    TomatosX閱讀 1,323評(píng)論 0 1
  • 01 我申請(qǐng)了第二輪提問(wèn)官,第二輪的提問(wèn)圍繞“生活方式”來(lái)進(jìn)行靈魂拷問(wèn)。我覺(jué)得生活方式這個(gè)主題非常不錯(cuò)。 從一個(gè)人...
    佑辰同學(xué)閱讀 571評(píng)論 0 0
  • 簡(jiǎn)書(shū)下載了數(shù)日,只簡(jiǎn)單關(guān)注了幾個(gè)公號(hào),關(guān)注了一個(gè)連載,一個(gè)自稱喜歡文字的人竟然沒(méi)有勇氣在自己的這幾分薄田里播下半粒...
    黃昏的出口閱讀 420評(píng)論 0 5
  • 【蛻變新生】20170527學(xué)習(xí)力踐行D73:英語(yǔ),開(kāi)始改聽(tīng)鵝媽媽五首,孩子不感冒,嘿嘿,繼續(xù)。繪本,《小熊寶寶繪...
    高汝鑫閱讀 167評(píng)論 0 0

友情鏈接更多精彩內(nèi)容