話說昨天面試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