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
示例一:被包装函数就可接收任意形式的参数
#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
相关文章推荐
- Python的函数机制与装饰器实现
- python 装饰器功能以及函数参数使用
- python通过装饰器检查函数参数数据类型的方法
- python 装饰器 二 (装饰带参数的函数)
- python深入笔记--装饰函数
- Python的函数和方法装饰漫谈(Function decorator)
- python: 从函数了解到装饰器
- Python中的函数、装饰器
- python 函数装饰器
- 【Python】[函数式编程]高阶函数,返回函数,装饰器,偏函数
- python 装饰器功能以及函数参数使用介绍
- 使用装饰器为Python函数做缓存
- python 使用函数装饰器的例子
- python通过装饰器检查函数参数数据类型的方法
- python 函数装饰器学习
- python 装饰器功能以及函数参数使用介绍
- Python 函数装饰器探讨
- Python: 无参数的函数装饰器
- Python函数小结(2)-- 装饰器、 lambda
- Python函数:装饰器