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

PYTHON 函数装饰器

2014-10-29 23:26 281 查看
装饰器其实也就是一个函数,一个用来包装函数的函数,参数为被包装的函数,装饰器在函数申明完成的时候被调用,调用之后申明的函数被换成一个被装饰器装饰过后的函数。

示例一:被包装函数就可接收任意形式的参数

#coding:utf-8:

from time import ctime,sleep

def main():

for i in range(4):

sleep(1)

myList = func(i)

print myList

def decofunc(fp):

def _d(*arg, **karg):

print "do sth before fp.."

r= fp(*arg, **karg)

print "do sth after fp.."

return r

return _d

@decofunc

def func(n):

return [x **2 for x in range(n)]

if __name__ == '__main__':

main()

执行后输出结果为:

>>>

do sth before fp..

do sth after fp..

[]

do sth before fp..

do sth after fp..

[0]

do sth before fp..

do sth after fp..

[0, 1]

do sth before fp..

do sth after fp..

[0, 1, 4]

>>>

示例二:装饰器带参数:再包装一层

#coding:utf-8:

def main():

f()

print "-"*20

f2(1)

print "-"*20

f2(a=1,b=4)

def d(a):

def _d(fp):

def __d(*arg, **karg):

print a

print "do sth before fp.."

r= fp(*arg, **karg)

print "do sth after fp.."

return r

return __d

return _d

@d("haha")

def f():

print "call f"

@d("hehe")

def f2(a, b=2):

print "call f2"

print a+b

if __name__ == '__main__':

main()

执行结果如下:

>>>

haha

do sth before fp..

call f

do sth after fp..

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

hehe

do sth before fp..

call f2

3

do sth after fp..

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

hehe

do sth before fp..

call f2

5

do sth after fp..

>>>

转载自 http://zhidao.baidu.com/link?url=3sJPRqkECozDZ9ROT5uB-_2C-pucr_e9_Uo9ugpUII7_gaiaWbj5xFv7L3nhC_pD_099VuXzV_nIrrTXNth4xa
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: