关于Python decorator的应用
2015-03-23 23:20
162 查看
最近继续给Ubuntu Tweak不断的添砖加瓦,目标将于下个月末与Ubuntu 12.04一齐发布一个新版本――Ubuntu Tweak 0.7。
在这个过程中,有了不少心得,也确实好久没有写具体的技术文章,今天就来写一篇吧~
今天要介绍的是Python的decorator的应用,我不打算介绍什么是decorator。因为学习一样技术不难,难的是如何把它应用起来。昨天我
在说我在用Decorator,微博上有个人说decorator没啥用,于是我就介绍个我在用的案例。
在Ubuntu Tweak这个项目当中,我使用logging来进行全局的log输出。比如我经常会在一些函数中打印出这个函数的名字、参数等:
很简单,它接受一个log的参数,即传入logger对象。然后它会先把函数名打印出来,接下来,会利用enumerate函数,将args、kwargs的任意参数给展开,并按顺序输出。最后,它再将func以这些参数包装回去,继续进行函数的执行和结果返回。
那么这个decorator如何用呢?
很简单,最上面的那个函数,只要这样改就可以了。
我这个decorator比较简单,用起来也比较简单,但切合decorator的主要思路:
取得函数名以及所有参数
在执行函数前或执行函数后输出相关信息
因此,当我们遇到需要在执行函数前进行的一些检测或预处理(pre),或者后处理(post),同时这部分操作又可以抽象出来的时候,decorator发挥的时候,就到了!
来源:http://imtx.me/archives/1706.html
在这个过程中,有了不少心得,也确实好久没有写具体的技术文章,今天就来写一篇吧~
今天要介绍的是Python的decorator的应用,我不打算介绍什么是decorator。因为学习一样技术不难,难的是如何把它应用起来。昨天我
在说我在用Decorator,微博上有个人说decorator没啥用,于是我就介绍个我在用的案例。
在Ubuntu Tweak这个项目当中,我使用logging来进行全局的log输出。比如我经常会在一些函数中打印出这个函数的名字、参数等:
def load_modules(self, name, default="test"): log.debug("Loading modules...%s, %s" % (name, default)) do_something()这种方式用的多了,也就烦了。因为每个函数的名称不同,参数的个数与类型也不同,有没有更简单的方法来达到我的目的?于是我想到了decorator。我写了下面这么一个wrapper(decorator):
def log_func(log): def wrap(func): def func_wrapper(*args, **kwargs): log.debug("%s:" % func) for i, arg in enumerate(args): log.debug("\targs-%d: %s" % (i + 1, arg)) for k, v in enumerate(kwargs): log.debug("\tdict args: %s: %s" % (k, v)) return func(*args, **kwargs) return func_wrapper return wrap这个decorator是什么意思呢?
很简单,它接受一个log的参数,即传入logger对象。然后它会先把函数名打印出来,接下来,会利用enumerate函数,将args、kwargs的任意参数给展开,并按顺序输出。最后,它再将func以这些参数包装回去,继续进行函数的执行和结果返回。
那么这个decorator如何用呢?
很简单,最上面的那个函数,只要这样改就可以了。
@log_func(log)def load_modules(self, *args, **kwargs): do_something()这样,如法炮制,就可以加在任何函数上面,完全用复制和粘贴就可以跟踪函数的调用及参数。如果把这个decorator稍微加工一下,就可以也把返回值也输出。
我这个decorator比较简单,用起来也比较简单,但切合decorator的主要思路:
取得函数名以及所有参数
在执行函数前或执行函数后输出相关信息
因此,当我们遇到需要在执行函数前进行的一些检测或预处理(pre),或者后处理(post),同时这部分操作又可以抽象出来的时候,decorator发挥的时候,就到了!
来源:http://imtx.me/archives/1706.html
相关文章推荐
- Test@python关于列表及字典的应用_(1)
- 关于Python的装饰器 decorator
- 关于python 的@操作符 Decorator 的用法
- 关于Python的应用发布技术
- 关于python中help函数的应用
- 【脚本语言系列】关于Python网络应用Telnet,你需要知道的事
- 关于pywin32引起python应用退出时c0000005错误的分析和解决
- Test@python关于列表及字典的应用_(2)
- 【Python】笔记简记--029:关于读写文件的一个应用项目
- python中关于cur.connect()等方法的应用实例
- python 深入浅出装饰器(decorator)--举的例子关于星级争霸2(starcraft2)
- 关于Python对简单的web框架flask的应用使得不只是本机而是局域网都能访问
- 【脚本语言系列】关于Python网络应用SNMP,你需要知道的事
- 关于Python 的@操作符 Decorator 的用法
- 关于Python 2to3 的应用.
- 关于python写GUI桌面应用的一些研究结果
- python 试题:请描述decorator(装饰器)的用法和它的应用场景,如果可以的话,写一个decorator
- 关于python 的@操作符 (Decorator) 的用法
- 关于python decorator找到的一篇比较好的文章