Python decorator

話說昨天面試python開發(fā)的時候,做了一個筆試題。

本來以為自己還算有python開發(fā)經(jīng)驗的,但是一真正測試才發(fā)現(xiàn)自己還是很弱啊。有一個是實現(xiàn)一個decorator,雖然平時用到裝飾器的情況很多,卻真的還沒自己實現(xiàn)過,于是就跪在這個題上了。回來之后一頓惡補,總結(jié)了一下。

首先就是 @wrapper := func = wrapper(func)。意思就是裝飾器實際上是修改并重載一個函數(shù),它是以一個函數(shù)做為參數(shù)并且返回一個函數(shù)。

然后

def wrapper(func): <br>
    def inner(*args, **kwargs):
        print "do extra work"
        return func(*args, **kwargs)
    return inner

這個wrapper函數(shù)返回了一個函數(shù),這個函數(shù)接受與func一樣的參數(shù),做了一些其他的事之后就可以返回原來的func了。

這里面還涉及到一個閉包closure的概念,每次wrapper接受不同的函數(shù),inner都會保存這個函數(shù)并返回一個新的函數(shù),也就是這個函數(shù)參數(shù)在wrapper結(jié)束后也沒有銷毀,它的生命周期在wrapper之外。

參考資料:十二步理解decorator

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 要點: 函數(shù)式編程:注意不是“函數(shù)編程”,多了一個“式” 模塊:如何使用模塊 面向?qū)ο缶幊蹋好嫦驅(qū)ο蟮母拍睢傩浴?..
    victorsungo閱讀 1,587評論 0 6
  • Python進階框架 希望大家喜歡,點贊哦首先感謝廖雪峰老師對于該課程的講解 一、函數(shù)式編程 1.1 函數(shù)式編程簡...
    Gaolex閱讀 5,534評論 6 53
  • 前言 最近學習Python,在看一個框架源碼過程中對裝飾器很困惑,Google了一圈,在stack overflo...
    dev_xdyang閱讀 6,358評論 4 17
  • 你記得你做過最勇敢的事是什么嗎?我仔細回憶了一下,我沒有做過任何一件算的上勇敢的事。 有人勇斗悍匪,有...
    易缺閱讀 412評論 0 0