Python decorator

2013-12-10  本文已影响0人  作卓

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

上一篇 下一篇

猜你喜欢

热点阅读