python wraps

时间:2022-03-06 01:11:26

用代码说明问题:

def d(f):
def _d(*args, **kwargs):
print f.__name__, ' is called'
f(*args, **kwargs)
return _d
@d
def test():
"""function test"""
print 'test' if __name__=='__main__':
print test.__name__, " | ", test.__doc__

输出:

_d  |  None

可能你想要输出的是这样的:

test | function test

原因自然是函数已经发生了变化。

如果想要输出"test | function test",可以用wraps,d修改如下:

from functools import wraps

def d(f):
@wraps(f)
def _d(*args, **kwargs):
print f.__name__, ' is called'
f(*args, **kwargs)
return _d

即,在_d上面用wraps(f)修饰一下。