您的位置:首页 > 编程语言 > Python开发

Python学习笔记:装饰器

2015-08-22 18:02 711 查看
今天看去年整理的python笔记,发现了当年匆匆书写的一些疑惑,今天下午请教了小熊之后,突然畅快十分~~


jeremy lin
现在趁着跑实验的间隙,重新梳理一遍这方面的知识,加深了解。

什么是装饰器

装饰器(decorator)是在python 2.4中引入的一种新语法,它能够对任何可调用的对象进行包装,既可以用于方法也可以用于函数。【Decorators provide a simple syntax for calling higher-order functions. By definition,
a decorator is a function that takes another function and extends the behavior of the latter function without explicitly modifying it.】

如果你看了上面的话之后还不是很理解什么是装饰器,那么,接下来我们来看看怎么用,就知道了

什么时候使用装饰器

我们先想象这样一个情况——你需要在测试几十个函数的运行时间,这个时候,一个方法就是你去每个函数内部加上time.time()来获得程序的运行时间和结束时间,也即是你修改这几十个函数,很显然,这非常麻烦。那么在python中,如何简便地实现这个情况呢?——使用装饰器(decorator),可以看到,这个时候装饰器的作用就是对函数进行包装来扩展它的功能,而不需要重写函数本身。还有一个场景就是给函数加logger功能,更多的我还没遇到~

下面看一个例子:

原始函数fun1()、装饰函数newf()【这个函数以另一个函数为参数输入】,我们定义好newf()之后,就可以利用@符号对很多函数进行包装扩展,即是只需要在你想要包装的函数的上面加一个“@newf”,如下所示:

def newf(fun):
def wrapper():
start_time = time.time()
fun()
end_time = time.time()
print end_time - start_time
return wrapper

@newf
def fun1(x):
return x**5上面过程等效于:
fun1 = newf(fun1)这个时候fun1的功能就比原来的fun1多了统计运行时间的功能了。

想知道更多

更多的内容可以参考如下的博文:

[1] 左耳朵耗子的博文:Python修饰器的函数式编程,http://coolshell.cn/articles/11265.html

[2] http://www.wklken.me/posts/2013/07/19/python-translate-decorator.html#

[3] A guide to Python's function decorators  http://thecodeship.com/patterns/guide-to-python-function-decorators/

[4]  可爱的 Python: Decorator 简化元编程 http://www.ibm.com/developerworks/cn/linux/l-cpdecor.html

更多资源 请关注 博客:LinJM-机器视觉 微博:林建民-机器视觉
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: