Python學習筆記(九)匿名函數(shù),*裝飾器

匿名函數(shù)

1)匿名函數(shù)有個限制幌甘,就是只能有一個表達式潮售,不用寫return,返回值就是該表達式的結(jié)果锅风。

2)因為沒有名字酥诽,不必擔心函數(shù)名沖突

3)可以把匿名函數(shù)賦值給一個變量,再利用變量來調(diào)用該函數(shù)

4)同樣皱埠,也可以把匿名函數(shù)作為返回值返回肮帐,比如:

def build(x, y):

? ? return lambda: x * x + y * y

裝飾器

1)函數(shù)對象有一個__name__屬性,可以拿到函數(shù)的名字

2)這種在代碼運行期間動態(tài)增加功能的方式边器,稱之為“裝飾器”(Decorator)训枢,decorator就是一個返回函數(shù)的高階函數(shù)

def log(func):

? ? def wrapper(*args, **kw):

? ? ? ? print('call %s():' % func.__name__)

? ? ? ? return func(*args, **kw)

? ? return wrapper

觀察上面的log,因為它是一個decorator忘巧,所以接受一個函數(shù)作為參數(shù)恒界,并返回一個函數(shù)。我們要借助Python的@語法砚嘴,把decorator置于函數(shù)的定義處:

@log

def now():

? ? ?print('2015-3-25')

調(diào)用now()函數(shù)仗处,不僅會運行now()函數(shù)本身眯勾,還會在運行now()函數(shù)前打印一行日志:

>>> now()

call now():

2015-3-25

把@log放到now()函數(shù)的定義處枣宫,相當于執(zhí)行了語句:

now= log(now)
如果decorator本身需要傳入?yún)?shù)婆誓,那就需要編寫一個返回decorator的高階函數(shù),寫出來會更復雜也颤。比如洋幻,要自定義log的文本:

def log(text):

? ? def decorator(func):

? ? ? ? def wrapper(*args, **kw):

? ? ? ? ? ? print('%s %s():' % (text, func.__name__))

? ? ? ? ? ?return func(*args, **kw)

? ? ? ? return wrapper

? ? return decorator

這個3層嵌套的decorator用法如下:

@log('execute')

def now():

? ? print('2015-3-25')

執(zhí)行結(jié)果如下:

>>> now()

execute now():

2015-3-25

和兩層嵌套的decorator相比,3層嵌套的效果是這樣的:

>>> now = log('execute')(now)

首先執(zhí)行l(wèi)og('execute')翅娶,返回的是decorator函數(shù)文留,再調(diào)用返回的函數(shù),參數(shù)是now函數(shù)竭沫,返回值最終是wrapper函數(shù)燥翅。

3)因為返回的那個wrapper()函數(shù)名字就是'wrapper',所以蜕提,需要把原始函數(shù)的__name__等屬性復制到wrapper()函數(shù)中森书,否則,有些依賴函數(shù)簽名的代碼執(zhí)行就會出錯谎势。

即在總的編寫前加上:

import functools

在wrapper定義前加上:

@functools.wraps(func)

使用時在案例代碼上進行修改可以簡單得到想要的效果

自己打一遍理解起來更快

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凛膏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子脏榆,更是在濱河造成了極大的恐慌猖毫,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件须喂,死亡現(xiàn)場離奇詭異吁断,居然都是意外死亡,警方通過查閱死者的電腦和手機坞生,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門仔役,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恨胚,你說我怎么就攤上這事骂因。” “怎么了赃泡?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵寒波,是天一觀的道長。 經(jīng)常有香客問我升熊,道長俄烁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任级野,我火速辦了婚禮页屠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己辰企,他們只是感情好风纠,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牢贸,像睡著了一般竹观。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上潜索,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天臭增,我揣著相機與錄音,去河邊找鬼竹习。 笑死誊抛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的整陌。 我是一名探鬼主播拗窃,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蔓榄!你這毒婦竟也來了并炮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甥郑,失蹤者是張志新(化名)和其女友劉穎逃魄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澜搅,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡伍俘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了勉躺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片癌瘾。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖饵溅,靈堂內(nèi)的尸體忽然破棺而出妨退,到底是詐尸還是另有隱情,我是刑警寧澤蜕企,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布咬荷,位于F島的核電站,受9級特大地震影響轻掩,放射性物質(zhì)發(fā)生泄漏幸乒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一唇牧、第九天 我趴在偏房一處隱蔽的房頂上張望罕扎。 院中可真熱鬧聚唐,春花似錦、人聲如沸腔召。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宴咧。三九已至根灯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掺栅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工纳猪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氧卧,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓氏堤,卻偏偏與公主長得像沙绝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鼠锈,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

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

  • 匿名函數(shù): lambda 不需要顯式地定義函數(shù)购笆,直接傳入匿名函數(shù)更方便粗悯。 關鍵字lambda表示匿名函數(shù),冒號前面...
    MJXH閱讀 508評論 0 0
  • 基礎1.r''表示''內(nèi)部的字符串默認不轉(zhuǎn)義2.'''...'''表示多行內(nèi)容3. 布爾值:True同欠、False(...
    neo已經(jīng)被使用閱讀 1,689評論 0 5
  • 裝飾器 定義: 假設我們要增強now()函數(shù)的功能样傍,比如,在函數(shù)調(diào)用前后自動打印日志铺遂,但又不希望修改now()函數(shù)...
    summer_lz閱讀 475評論 0 0
  • 函數(shù)式編程就是一種抽象程度很高的編程范式衫哥,純粹的函數(shù)式編程語言編寫的函數(shù)沒有變量,因此襟锐,任意一個函數(shù)撤逢,只要輸入是確...
    齊天大圣李圣杰閱讀 1,535評論 0 2
  • 盯著這幅向日葵看了許久 看不夠,看不透 向日葵里充盈的能量 滿溢而敞亮 足以豐盈潤澤干枯的心田 世界上粮坞,有無數(shù)的巧...
    LOVE玲媛閱讀 324評論 0 0