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

python之装饰器

时间:2016-03-26 09:02:37      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:python   装饰器   


装饰器:本身是一个函数,用于装饰其他函数。

作用:增强被装饰函数的功能。


装饰器通常把其他函数作为参数,增加其功能。


例1:函数不需被调用,直接运行 

>>> def deco(func): ######定义装饰器函数,func函数为参数

...     print(‘before myfunc() called‘)

...     func()  #######调用原函数,也就是被装饰的函数

...     print(‘after myfunc() called ‘)

... 

>>> @deco      ######用@标识装饰器

... def myfunc():  #########myfunc()将作为函数传入deco函数,被装饰函数

...     a = 1

...     b = 2

...     print(a+b)

... 

before myfunc() called

3

after myfunc() called 


例2:用内套函数,不让函数直接运行

>>> def deco(func):   ######定义函数,func函数为参数

...     def _deco():   ######定义内置函数,若每次函数,装饰器执行结束,程序运行

...         print(‘before myfunc() called‘)

...         func()   #######调用原函数,也就是被装饰的函数

...         print(‘after myfunc() called ‘)

...     return _deco   ######调用_deco函数,

... 

>>> @deco        ########定义装饰器

... def myfunc():  ########被装饰函数

...     print(‘myfunc() called‘)

...     return ‘ok‘

... 

>>> myfunc()   ################调用函数,被装饰后功能加强

before myfunc() called

myfunc() called

after myfunc() called 

>>> myfunc()   ############可以多次调用

before myfunc() called

myfunc() called

after myfunc() called 


例3:被装饰的函数带参数

>>> def deco(func):         ########func只能是被装饰函数,无论带不带参数,都这么写

...     def _deco(a,b):    ###########此函数参数,为被装饰参数的传值

...         print(‘before myfunc() called‘)

...         ret = func(a,b)       #############调用被装饰函数,参数来之_deco(a,b)

...         print(‘after myfunc() called()‘)

...         return ret

...     return _deco   #########调用_deco函数

... 

>>> @deco 

... def myfunc(a,b):      #######被装饰函数带参数

...     print(‘myfunc(%s,%s) called‘ %(a,b))

...     return a+b

... 

>>> myfunc(1,2)    #########调用被装饰参数

before myfunc() called

myfunc(1,2) called   

after myfunc() called()

3


函数运行说明:

myfunc()函数被调用,此时将作为参数传入deco函数,deco函数嵌套_deco函数,在解析到return _deco时,调用_deco(a,b)函数,输出before myfunc() called,调用func(a,b)函数,输出函数内容myfunc(1,2) called, 并将返回值赋给ret,之后输出after myfunc() called(),输出ret,程序运行结束。



参考;

http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html

python之装饰器

标签:python   装饰器   

原文地址:http://weilantiankong.blog.51cto.com/9469693/1754935

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