#python decorator @
python装饰器是对原函数的一层包装,旨在为原函数或者类似函数增加一个共同或者额外的功能
- 使用范式:先定义修饰函数,然后再用@来装饰原函数
#修饰函数方式一:
def dec(f):
#do something here
return f
#修饰函数方式二:
def dec(f):
#定义一个新函数
def new_f():
#do something here
return f()
return new_f
@dec
def original(*args,**kwargs):
#do something original here, for example
for i in args:
print i
for k,v in kwargs.items():
print k,v
- 同义:
def dec(f)
#do somethng
return f
def original(*args,**kwargs):
pass
original=dec(original)
- 装饰符带参数的函数
def dec(f):
#do something
def _dec(a,b):
# do something
f(a,b)
return _dec
- 装饰带任意多个参数的函数
def dec(f):
#do something
def _dec(*args,**kwargs):
#do something
f(*args,**kwargs)
return _dec
- 让装饰函数带参数
def dec(arg):
def _dec(f):
def __dec()
#do something with arg
f()
return __dec
return _dec
- functools模块
def thisIsliving(fun):
def living(*args, **kw):
return fun(*args, **kw) + '活着就是吃嘛。'
return living
@thisIsliving
def whatIsLiving():
"什么是活着"
return '对啊,怎样才算活着呢?'
print whatIsLiving()
print whatIsLiving.__doc__
print
from functools import update_wrapper
def thisIsliving(fun):
def living(*args, **kw):
return fun(*args, **kw) + '活着就是吃嘛。'
return update_wrapper(living, fun)
@thisIsliving
def whatIsLiving():
"什么是活着"
return '对啊,怎样才算活着呢?'
print whatIsLiving()
print whatIsLiving.__doc__
- 实例