Python標準庫functools

functools模塊提供了高階函數(shù)功能:函數(shù)可以作為或者返回其他函數(shù)琉历。通常硼端, 任何可調(diào)用對象可以被視為在本模塊的函數(shù)亚兄。

高階函數(shù)是指將函數(shù)作為傳參或返回值的函數(shù)低滩,即functools提供了一些工具顽冶,用來處理函數(shù)欺抗。包含的方法主要有cmp_to_key, partial, reduce, total_ordering, update_wrapper, wraps。

cmp_to_key

cmp_to_key的作用就是講cmp函數(shù)轉(zhuǎn)化為key函數(shù)强重。這里有兩個概念:

比較函數(shù)是任何一個可調(diào)用的函數(shù)绞呈,且包含兩個參數(shù),對參數(shù)進行比較间景,如果小于返回負數(shù)佃声,等于返回0,大于返回正數(shù)倘要。
關鍵函數(shù)是一種可調(diào)用函數(shù)圾亏。接受一個參數(shù),返回另一個表明其在期望序列中的位置的值封拧。

cmp_to_key應用在需要key函數(shù)作為參數(shù)的函數(shù)中志鹃,比如sorted, min, max等。我們用sorted函數(shù)舉例:

from functools import cmp_to_key
s1 = sorted(range(5)) # [0, 1, 2, 3, 4]
s2 = sorted(range(5), cmp=lambda x, y: x % 3 - y % 3)
s3 = sorted(range(5), key=lambda x: x % 3
s4 = sorted(range(5), key=cmp_to_key(lambda x, y: x % 3 - y % 3))

上面的例子中泽西,s1是默認排序曹铃;s2,s3捧杉,s4是等效的陕见,將0-4按照模3進行比較。s2指定了cmp函數(shù)味抖,s3指定了key函數(shù)淳玩,s4將s2的cmp函數(shù)轉(zhuǎn)換為key函數(shù)。

partial

partial是偏函數(shù)應用非竿,將函數(shù)的部分參數(shù)固定到新的函數(shù)中蜕着。一般實現(xiàn):

def add(x, y):
    return x + y

def add2(y):
    return add(2, y)

add2(3) # 5

上面的例子是將add函數(shù)的一個參數(shù)x=2固定到add2中。這個例子可以通過partial實現(xiàn):

def add(x, y):
    return x + y

add2 = functools.partial(add, 2)

add2(3) # 5

reduce

就是python2 內(nèi)建函數(shù)reduce。在python3中reduce被移除內(nèi)建函數(shù)承匣,用functools.reduce可以向前兼容蓖乘。

total_ordering

total_ordering 同樣是 Python 2.7 中新增函數(shù),用于簡化比較函數(shù)的寫法韧骗。如果你已經(jīng)定義了 __eq__ 方法嘉抒,以及 __lt__、__le__袍暴、__gt__ 或者 __ge__ 其中之一些侍, 即可自動生成其它比較方法。官方示例:

@total_ordering
class Student:
    def __eq__(self, other):
        return ((self.lastname.lower(), self.firstname.lower()) ==
                (other.lastname.lower(), other.firstname.lower()))
    def __lt__(self, other):
        return ((self.lastname.lower(), self.firstname.lower()) <
                (other.lastname.lower(), other.firstname.lower()))
dir(Student) # ['__doc__', '__eq__', '__ge__', '__gt__', '__le__', '__lt__', '__module__']

warps

之前了解過裝飾器函數(shù)政模,裝飾器會有一個副作用岗宣,會把原函數(shù)的名字覆蓋掉。

def outer(fun):
    def inner():
        pass
    return inner

@outer
def fun():
    pass

f = fun
f.__name__ # inner

wraps用來解決這個問題淋样。

def outer(fun):
    @wraps
    def inner():
        pass
    return inner

@outer
def fun():
    pass

f = fun
f.__name__ # fun

除了__name__外耗式,wraps還能修改的屬性可以通過functools.WRAPPER_ASSIGNMENTS查詢。

('__module__', '__name__', '__doc__')

update_wrapper

update_wrapper功能與wraps類似趁猴,后者可以看做前者的特化刊咳,可以理解為

wraps = partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)

參考

http://python.usyiyi.cn/python_278/library/index.html

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市儡司,隨后出現(xiàn)的幾起案子娱挨,更是在濱河造成了極大的恐慌,老刑警劉巖捕犬,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件让蕾,死亡現(xiàn)場離奇詭異,居然都是意外死亡或听,警方通過查閱死者的電腦和手機探孝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來誉裆,“玉大人顿颅,你說我怎么就攤上這事∽愣” “怎么了粱腻?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斩跌。 經(jīng)常有香客問我绍些,道長,這世上最難降的妖魔是什么耀鸦? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任柬批,我火速辦了婚禮啸澡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘氮帐。我一直安慰自己嗅虏,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布上沐。 她就那樣靜靜地躺著皮服,像睡著了一般。 火紅的嫁衣襯著肌膚如雪参咙。 梳的紋絲不亂的頭發(fā)上龄广,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音蕴侧,去河邊找鬼择同。 笑死,一個胖子當著我的面吹牛戈盈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谆刨,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼塘娶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痊夭?” 一聲冷哼從身側(cè)響起刁岸,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎她我,沒想到半個月后虹曙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡番舆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年酝碳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恨狈。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡疏哗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出禾怠,到底是詐尸還是另有隱情返奉,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布吗氏,位于F島的核電站芽偏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏弦讽。R本人自食惡果不足惜污尉,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧十厢,春花似錦等太、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至包颁,卻和暖如春瞻想,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背娩嚼。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工蘑险, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岳悟。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓佃迄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贵少。 傳聞我的和親對象是個殘疾皇子呵俏,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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

  • 1 functools函數(shù) functools模塊用于高階函數(shù):作用與或者返回其它函數(shù)的函數(shù)。一般來說滔灶,對于該模塊...
    lakerszhy閱讀 9,993評論 0 7
  • Python進階框架 希望大家喜歡普碎,點贊哦首先感謝廖雪峰老師對于該課程的講解 一、函數(shù)式編程 1.1 函數(shù)式編程簡...
    Gaolex閱讀 5,499評論 6 53
  • 函數(shù)式編程就是一種抽象程度很高的編程范式录平,純粹的函數(shù)式編程語言編寫的函數(shù)沒有變量麻车,因此,任意一個函數(shù)斗这,只要輸入是確...
    齊天大圣李圣杰閱讀 1,532評論 0 2
  • 教程總綱:http://www.runoob.com/python/python-tutorial.html 進階...
    健康哥哥閱讀 2,031評論 1 3
  • 產(chǎn)后肥胖是很多媽媽的噩夢序目,每次看到鏡子里臃腫變形的身材,都會感到十分抑郁伯襟、自卑猿涨。減肥就成了媽媽們的“終身大事”,很...
    真先生閱讀 218評論 0 0