码迷,mamicode.com
首页 > 编程语言 > 详细

python 装饰器

时间:2016-04-09 13:54:09      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

装饰器本质:为函数附加额外功能。

装饰器虽然最终执行了被装饰函数的内容,但是仅仅是把被装饰函数内容带入到新函数中而已,变成了执行被装饰函数内容的新函数。

对带参数的函数进行装饰分两种:一个是明确函数参数个数的,直接在装饰器里声明同样个数的参数,对于参数数量不确定的则用 不订参数*args,**kwargs声明,函数自己会判断处理.

装饰器不仅可以是函数还可以是类。装饰器装饰的不仅可以是函数也可以是类。

 

摘录:

总结:【1】@decorator后面不带括号时(也即装饰器无参数时),效果就相当于先定义func或cls,而后执行赋值操作func=decorator(func)或cls=decorator(cls);

【2】@decorator后面带括号时(也即装饰器有参数时),效果就相当于先定义func或cls,而后执行赋值操作 func=decorator(decoratorArgs)(func)或cls=decorator(decoratorArgs)(cls);

【3】如上将func或cls重新赋值后,此时的func或cls也不再是原来定义时的func或cls,而是一个可执行体,你只需要传入参数就可调用,func(args)=>返回值或者输出,cls(args)=>object of cls;

【4】最后通过赋值返回的执行体是多样的,可以是闭包,也可以是外部函数;当被装饰的是一个类时,还可以是类内部方法,函数;

【5】另外要想真正了解装饰器,一定要了解func.func_code.co_varnames,func.func_defaults,通过它们你可以以func的定义之外,还原func的参数列表;另外关键字参数是因为调用而出现的,而不是因为func的定义,func的定义中的用等号连接的只是有默认值的参数,它们并不一定会成为关键字参数,因为你仍然可以按照位置来传递它们。

python 装饰器

标签:

原文地址:http://www.cnblogs.com/yanggongfu/p/5371308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!