[Leetcode刷題筆記](méi)python3中functools模塊

本文記錄LeetCode刷題一些知識(shí)點(diǎn)默刚,水平有限還望多多指正

斐波那契序列 Tn 定義如下:
T0 = 0, T1 = 1, 且在 n >= 0 的條件下 Tn+2 = Tn + Tn+1
給你整數(shù) n虐块,請(qǐng)返回第 n 個(gè)泰波那契數(shù) Tn 的值挣菲。

方法一:使用遞歸

class Solution:
    def fabonacci(self, n: int) -> int:
        if n<2:return n
        return self.tribonacci(n-1)+self.tribonacci(n-2)

結(jié)果:超時(shí)

改進(jìn):使用lru緩存加速

import functools
class Solution:
    @functools.lru_cache(None)
    def fabonacci(self, n: int) -> int:
       if n<2:return n
       return self.tribonacci(n-1)+self.tribonacci(n-2)

結(jié)果:38ms 13.8 MB

方法二:使用循環(huán)

class Solution:
    def fabonacci(self, n: int) -> int:
        a, b = 0, 1
        for i in range(n) :
            a, b = b, a+b
        return a

結(jié)果:40ms 13.8 MB

Note:functools模塊

functools模塊用于高階函數(shù)立肘,作用與或者返回其它函數(shù)的函數(shù)铲球。一般來(lái)說(shuō)彻况,對(duì)于該模塊谁尸,任何可調(diào)用對(duì)象都可以視為一個(gè)函數(shù)

  • @functools.lru_cache(maxsize=128, typed=False):該函數(shù)裝飾器使用 LRU緩存算法來(lái)緩存相對(duì)耗時(shí)的函數(shù)結(jié)果,避免傳入相同的參數(shù)重復(fù)計(jì)算纽甘。同時(shí)良蛮,緩存并不會(huì)無(wú)限增長(zhǎng),不用的緩存會(huì)被釋放悍赢。其中 maxsize 參數(shù)用于設(shè)置緩存占用的最大字節(jié)數(shù)决瞳,typed 參數(shù)用于設(shè)置將不同類型的緩存結(jié)果分開(kāi)存放。

除此之外模塊中還有:

  • functools.cmp_to_key(func):將老式的比較函數(shù)(func)轉(zhuǎn)換為關(guān)鍵字函數(shù)(key function)左权。在 Python 3 中比較大小瞒斩、排序都是基于關(guān)鍵字函數(shù)的,Python 3 不支持老式的比較函數(shù)涮总。

  • @functools.total_ordering:這個(gè)類裝飾器(作用類似于函數(shù)裝飾器胸囱,只是它用于修飾類)用于為類自動(dòng)生成比較方法。通常來(lái)說(shuō)瀑梗,開(kāi)發(fā)者只要提供 lt()烹笔、le()、gt()抛丽、ge() 其中之一(最好能提供 eq() 方法)谤职,@functools.total_ordering裝飾器就會(huì)為該類生成剩下的比較方法。

  • functools.partial(func, *args, **keywords):該函數(shù)用于為 func 函數(shù)的部分參數(shù)指定參數(shù)值亿鲜,從而得到一個(gè)轉(zhuǎn)換后的函數(shù)允蜈,程序以后調(diào)用轉(zhuǎn)換后的函數(shù)時(shí)冤吨,就可以少傳入那些己指定值的參數(shù)。

  • functools.partialmethod(func, *args, **keywords):該函數(shù)與上一個(gè)函數(shù)的含義完全相同饶套,只不過(guò)該函數(shù)用于為類中的方法設(shè)置參數(shù)值漩蟆。

  • functools.reduce(function, iterable[, initializer]):將初始值(默認(rèn)為 0,可由 initializer 參數(shù)指定)妓蛮、迭代器的當(dāng)前元素傳入 function 函數(shù)怠李,將計(jì)算出來(lái)的函數(shù)結(jié)果作為下一次計(jì)算的初始值、迭代器的下一個(gè)元素再次調(diào)用 function 函數(shù)……依此類推蛤克,直到迭代器的最后一個(gè)元素捺癞。

  • @functools.singledispatch:該函數(shù)裝飾器用于實(shí)現(xiàn)函數(shù)對(duì)多個(gè)類型進(jìn)行重載。比如同樣的函數(shù)名稱构挤,為不同的參數(shù)類型提供不同的功能實(shí)現(xiàn)髓介。該函數(shù)的本質(zhì)就是根據(jù)參數(shù)類型的變換,將函數(shù)轉(zhuǎn)向調(diào)用不同的函數(shù)筋现。

  • functools.update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES:對(duì) wrapper 函數(shù)進(jìn)行包裝唐础,使之看上去就像 wrapped(被包裝)函數(shù)。

  • @functools.wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES):該函數(shù)裝飾器用于修飾包裝函數(shù)夫否,使包裝函數(shù)看上去就像 wrapped 函數(shù)彻犁。

通過(guò)介紹不難發(fā)現(xiàn),functools.update_wrapper@functools.wraps 的功能是一樣的凰慈,只不過(guò)前者是函數(shù)汞幢,因此需要把包裝函數(shù)作為第一個(gè)參數(shù)傳入;而后者是函數(shù)裝飾器微谓,因此使用該函數(shù)裝飾器修飾包裝函數(shù)即可森篷,無(wú)須將包裝函數(shù)作為第一個(gè)參數(shù)傳入。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末豺型,一起剝皮案震驚了整個(gè)濱河市仲智,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姻氨,老刑警劉巖钓辆,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異肴焊,居然都是意外死亡前联,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)娶眷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)似嗤,“玉大人,你說(shuō)我怎么就攤上這事届宠∷嘎洌” “怎么了乘粒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)伤塌。 經(jīng)常有香客問(wèn)我灯萍,道長(zhǎng),這世上最難降的妖魔是什么寸谜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任竟稳,我火速辦了婚禮属桦,結(jié)果婚禮上熊痴,老公的妹妹穿的比我還像新娘。我一直安慰自己聂宾,他們只是感情好果善,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著系谐,像睡著了一般巾陕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纪他,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天鄙煤,我揣著相機(jī)與錄音,去河邊找鬼茶袒。 笑死梯刚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的薪寓。 我是一名探鬼主播亡资,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼向叉!你這毒婦竟也來(lái)了锥腻?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤母谎,失蹤者是張志新(化名)和其女友劉穎瘦黑,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體奇唤,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幸斥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冻记。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睡毒。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖冗栗,靈堂內(nèi)的尸體忽然破棺而出演顾,到底是詐尸還是另有隱情供搀,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布钠至,位于F島的核電站葛虐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏棉钧。R本人自食惡果不足惜屿脐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宪卿。 院中可真熱鬧的诵,春花似錦、人聲如沸佑钾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)休溶。三九已至代赁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兽掰,已是汗流浹背芭碍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留孽尽,地道東北人窖壕。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像泻云,于是被迫代替她去往敵國(guó)和親艇拍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容