Python:擴(kuò)充函數(shù)參數(shù)

在使用裝飾器的過程中片酝,我們有時候會遇到這樣的一個問題:
我有一個裝飾器 & 我有一個函數(shù)。裝飾器的某一個參數(shù)需要在我使用函數(shù)的時候動態(tài)輸入绽榛,又或者我不能改變這個函數(shù)的情況下需要增加參數(shù)表來額外增加一些功能嗓节。
例如在Django定時任務(wù)這篇文章的最后我提到repeat關(guān)鍵字參數(shù)來控制函數(shù)的運(yùn)行周期臼节,這種時候我們該如何實(shí)現(xiàn)呢接剩?

Solution


以上面文章提到的@background()裝飾器為例(邏輯部分略過切厘,只解析參數(shù))。
可以這樣實(shí)現(xiàn)

from functools import wraps

def background(*, schedule):
    def dont_care_name(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            try:
                repeat = kwargs.pop("repeat")
                # do something with repeat
            except KeyError:
                pass
            return func(*args, **kwargs)
        return wrapper
    # do something with schedule
    return dont_care_name

其他都是細(xì)枝末節(jié)懊缺,重要的是疫稿,我們在獲取函數(shù)參數(shù)的那一層函數(shù)里嘗試截取repeat這個關(guān)鍵字參數(shù)。使得無論這個參數(shù)存在與否都不會影響到func()的執(zhí)行鹃两。

  • 這一功能好處在于遗座,如果我有一個通用裝飾器。那么只需要一點(diǎn)小小的修改俊扳,就既兼容了以前的代碼途蒋,又增加了新的功能。并且函數(shù)使用起來就像從未發(fā)生改變過一樣馋记。壞處是:如果你的代碼對速度要求苛刻到一點(diǎn)點(diǎn)的扣時間優(yōu)化号坡,那么這種寫法會讓你的運(yùn)行速度多上幾毫秒。(但既然要求速度抗果,何不用Go呢,笑)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奸晴,一起剝皮案震驚了整個濱河市冤馏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寄啼,老刑警劉巖逮光,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件代箭,死亡現(xiàn)場離奇詭異,居然都是意外死亡涕刚,警方通過查閱死者的電腦和手機(jī)嗡综,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杜漠,“玉大人极景,你說我怎么就攤上這事〖蒈睿” “怎么了盼樟?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锈至。 經(jīng)常有香客問我晨缴,道長,這世上最難降的妖魔是什么峡捡? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任击碗,我火速辦了婚禮,結(jié)果婚禮上们拙,老公的妹妹穿的比我還像新娘稍途。我一直安慰自己,他們只是感情好睛竣,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布晰房。 她就那樣靜靜地躺著,像睡著了一般射沟。 火紅的嫁衣襯著肌膚如雪殊者。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天验夯,我揣著相機(jī)與錄音猖吴,去河邊找鬼。 笑死挥转,一個胖子當(dāng)著我的面吹牛海蔽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绑谣,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼党窜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了借宵?” 一聲冷哼從身側(cè)響起幌衣,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后豁护,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哼凯,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年楚里,在試婚紗的時候發(fā)現(xiàn)自己被綠了断部。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡班缎,死狀恐怖蝴光,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吝梅,我是刑警寧澤虱疏,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站苏携,受9級特大地震影響做瞪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜右冻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一装蓬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纱扭,春花似錦牍帚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肃叶,卻和暖如春蹂随,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背因惭。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工岳锁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蹦魔。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓激率,卻偏偏與公主長得像,于是被迫代替她去往敵國和親勿决。 傳聞我的和親對象是個殘疾皇子乒躺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評論 2 361

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,336評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)低缩,斷路器嘉冒,智...
    卡卡羅2017閱讀 134,719評論 18 139
  • 來福建一年多一點(diǎn)了,當(dāng)剛剛深圳待了兩個月,突然接到要調(diào)到福建的消息還是很意外的健爬,沒有做過業(yè)務(wù)的自己能不能幫著上級...
    破舊的風(fēng)閱讀 273評論 0 1
  • ———————————————————— 憑直覺選一個 _ _ _ _ _ 測試結(jié)果 第一只眼睛 你的性格有矛盾之...
    九號館閱讀 394評論 0 0
  • 媳婦能生壤短,這絕對不是貶低她设拟,是打心眼里高興。 她在5年時間里生了3個孩子久脯,都是兒子纳胧,多產(chǎn),高效帘撰。 按說她也算是經(jīng)驗...
    予墨讀書閱讀 891評論 0 0