話說昨天面試python開發的時候,做了一個筆試題。
本來以為自己還算有python開發經驗的,但是一真正測試才發現自己還是很弱啊。有一個是實現一個decorator,雖然平時用到裝飾器的情況很多,卻真的還沒自己實現過,于是就跪在這個題上了。回來之后一頓惡補,總結了一下。
首先就是 @wrapper
:= func = wrapper(func)
。意思就是裝飾器實際上是修改并重載一個函數,它是以一個函數做為參數并且返回一個函數。
然后
def wrapper(func): <br>
def inner(*args, **kwargs):
print "do extra work"
return func(*args, **kwargs)
return inner
這個wrapper
函數返回了一個函數,這個函數接受與func一樣的參數,做了一些其他的事之后就可以返回原來的func了。
這里面還涉及到一個閉包closure
的概念,每次wrapper
接受不同的函數,inner
都會保存這個函數并返回一個新的函數,也就是這個函數參數在wrapper
結束后也沒有銷毀,它的生命周期在wrapper
之外。
參考資料:十二步理解decorator