首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

[Python入门及进阶札记]Python-decorator装饰器小结

2012-11-08 
[Python入门及进阶笔记]Python-decorator装饰器小结想找个地方快乐的coding,貌不是一件容易的事情。一时冲

[Python入门及进阶笔记]Python-decorator装饰器小结

想找个地方快乐的coding,貌似不是一件容易的事情。

一时冲动,不过后路已断,做自己想做的事情,总要付出一些代价的,坚持吧,只能。

吐槽下,本周各种事情,搞得如越级打怪般艰难。周六,去三小时,回来三小时,大败而归,但是还是学到不少东西。

差距还是有的,虽然自信可以在最短时间补上,但是,需要成本。


总之,貌似时机不对,哎

以上废话,进入正题

---------------------------------------

上周六碰到了,一周忙碌,今天稍微理下,待补全,资料主要来源于书籍,网络&self.coding()。有任何问题,请指正哈


1.基本概念

装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理, Web权限校验, Cache等。

具体概念自己google


很有名的例子,就是咖啡,加糖的咖啡,加牛奶的咖啡。

本质上,还是咖啡,只是在原有的东西上,做了“装饰”,使之附加一些功能或特性。


例如记录日志,需要对某些函数进行记录

笨的办法,每个函数加入代码,如果代码变了,就悲催了

装饰器的办法,定义一个专门日志记录的装饰器,对需要的函数进行装饰,搞定

2.优点

抽离出大量函数中与函数功能本身无关的雷同代码并继续重用

即,可以将函数“修饰”为完全不同的行为,可以有效的将业务逻辑正交分解,如用于将权限和身份验证从业务中独立出来

概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能


3.Python中的装饰器

在Python中,装饰器实现是十分方便的,原因是:函数可以被扔来扔去。

函数作为一个对象:A.可以被赋值给其他变量,可以作为返回值

                                    B.可以被定义在另外一个函数内

def:

装饰器是一个函数,一个用来包装函数的函数,装饰器在函数申明完成的时候被调用,调用之后返回一个修改之后的函数对象,将其重新赋值原来的标识符,并永久丧失对原始函数对象的访问(申明的函数被换成一个被装饰器装饰过后的函数)

 

当我们对某个方法应用了装饰方法后, 其实就改变了被装饰函数名称所引用的函数代码块入口点,使其重新指向了由装饰方法所返回的函数入口点。

由此我们可以用decorator改变某个原有函数的功能,添加各种操作,或者完全改变原有实现

 

4.分类:

装饰器分为无参数decorator,有参数decorator

无参数decorator

生成一个新的装饰器函数

 

有参decorator:

有参装饰,装饰函数先处理参数,再生成一个新的装饰器函数,然后对函数进行装饰


装饰器有参/无参,函数有参/无参,组合共4种


5.具体定义:

decorator方法

A.把要装饰的方法作为输入参数,

B.在函数体内可以进行任意的操作(可以想象其中蕴含的威力强大,会有很多应用场景),

C.只要确保最后返回一个可执行的函数即可(可以是原来的输入参数函数, 或者是一个新函数)


(1)无参数装饰器 – 包装无参数函数



The end!

wklken

Gighub: https://github.com/wklken

Blog: http://wklken.sinaapp.com/

2012-10-27


转载请注明出处,谢谢! 


热点排行