话说昨天面试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