Python裝飾器

Python裝飾器分兩種情況:
1.如果decorator本身不用傳入?yún)?shù)的話,只是接受一個(gè)函數(shù)(當(dāng)然也可以把接受的函數(shù)作為參數(shù)同仆,為了區(qū)別,我們暫且將他們分開),并返回一個(gè)函數(shù)的話盐类,當(dāng)使用@log時(shí)即把目標(biāo)函數(shù)接入;
2.如果decorator本身需要傳入?yún)?shù)呛谜,那我們首先就需要在外層嵌套一個(gè)傳入?yún)?shù)的接口在跳,然后再接受函數(shù)并返回一個(gè)函數(shù),內(nèi)層則就是重復(fù)第一種情況隐岛,當(dāng)時(shí)用@log('要傳入的參數(shù)')猫妙,log('要傳入的參數(shù)')就相當(dāng)于第一種情況的log,也許這樣說你還不是很能理解聚凹,我把廖大大的代碼稍微做一點(diǎn)點(diǎn)改變割坠,只改變下函數(shù)的名稱:

1. 裝飾器本身不用傳入?yún)?shù),只接收函數(shù)func

def decorator(func):
@functools.wraps(func)
def wrapper(*args, *kw):
print('call %s():' % func.name)
return func(
args, **kw)
return wrapper

@decorator
def f():
pass

2. 裝飾器本身需要傳入?yún)?shù)妒牙,再接收函數(shù)func

def log(text):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, *kw):
print('%s %s():' % (text, func.name))
return func(
args, **kw)
return wrapper
return decorator

@log('execute')
def f():
pass

其中第二種情況@log('execute')就是傳入了字符串參數(shù)的decorator彼哼,傳入?yún)?shù)之后就完全等同于第一種情況的@decorator,log只是在第一種情況下作為實(shí)現(xiàn)傳入字符串參數(shù)功能的外層湘今,可以發(fā)現(xiàn)第二種情況的內(nèi)層完全和第一種情況相同沪羔。線性的把第二種情況展開:首先log()傳入字符串參數(shù),然后返回decorator接受目標(biāo)函數(shù)func象浑,返回wrapper蔫饰,最后wrapper輸出內(nèi)容并運(yùn)行目標(biāo)函數(shù)。明顯傳入字符串參數(shù)之后完全和第一種情況一致愉豺。

其他相關(guān)幫助理解資料:
探究functools模塊wraps裝飾器的用途 - 大道曙光
[譯] 12步輕松搞定python裝飾器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末篓吁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蚪拦,更是在濱河造成了極大的恐慌杖剪,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驰贷,死亡現(xiàn)場離奇詭異盛嘿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)括袒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門次兆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锹锰,你說我怎么就攤上這事芥炭±炜猓” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵园蝠,是天一觀的道長渺蒿。 經(jīng)常有香客問我,道長彪薛,這世上最難降的妖魔是什么茂装? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮善延,結(jié)果婚禮上少态,老公的妹妹穿的比我還像新娘。我一直安慰自己挚冤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布赞庶。 她就那樣靜靜地躺著训挡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歧强。 梳的紋絲不亂的頭發(fā)上澜薄,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機(jī)與錄音摊册,去河邊找鬼肤京。 笑死,一個(gè)胖子當(dāng)著我的面吹牛茅特,可吹牛的內(nèi)容都是我干的忘分。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼白修,長吁一口氣:“原來是場噩夢啊……” “哼妒峦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兵睛,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤肯骇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后祖很,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笛丙,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年假颇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胚鸯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笨鸡,死狀恐怖蠢琳,靈堂內(nèi)的尸體忽然破棺而出啊终,到底是詐尸還是另有隱情,我是刑警寧澤傲须,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布蓝牲,位于F島的核電站,受9級特大地震影響泰讽,放射性物質(zhì)發(fā)生泄漏例衍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一已卸、第九天 我趴在偏房一處隱蔽的房頂上張望佛玄。 院中可真熱鬧,春花似錦累澡、人聲如沸梦抢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奥吩。三九已至,卻和暖如春蕊梧,著一層夾襖步出監(jiān)牢的瞬間霞赫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工肥矢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留端衰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓甘改,卻偏偏與公主長得像旅东,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子十艾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

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

  • 每個(gè)人都有的內(nèi)褲主要功能是用來遮羞玉锌,但是到了冬天它沒法為我們防風(fēng)御寒,咋辦疟羹?我們想到的一個(gè)辦法就是把內(nèi)褲改造一下主守,...
    chen_000閱讀 1,365評論 0 3
  • 一. 有時(shí)候我們會(huì)有這樣需求: 在原有的邏輯前后添加一段邏輯 如: 在增/刪/改操作之前檢查用戶是否登錄、某個(gè)操...
    元亨利貞o閱讀 697評論 1 4
  • 一.函數(shù)裝飾器 1.從Python內(nèi)層函數(shù)說起 首先我們來探討一下這篇文章所講的內(nèi)容Inner Functions...
    軟體動(dòng)物Ai閱讀 3,255評論 0 14
  • 雖然人們能利用函數(shù)閉包(function clouser)寫出簡單的裝飾器榄融,但其可用范圍常受限制参淫。多數(shù)實(shí)現(xiàn)裝飾器的...
    gomibako閱讀 1,025評論 0 4
  • 讀古代軍事詩歌有感…… 這雄渾壯魄瑰麗千古的滔滔歷史長河中 也曾有過同樣的畫面 那點(diǎn)點(diǎn)繁星漆沉如水的深夜 幢幢借昏...
    星海上泛起的光閱讀 507評論 17 33