from functools import wraps
def a():
a='aa'
def b():
b="bbb"
c=wraps(a)(b)
print c#what happen?
Run Code Online (Sandbox Code Playgroud)
什么是包裹意味着,例子是最好的.
引自文档:
functools.wraps(wrapped[, assigned][, updated])
Run Code Online (Sandbox Code Playgroud)
这是一个便利函数,用于partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)在定义包装函数时调用函数装饰器.例如:
>>> from functools import wraps
>>> def my_decorator(f):
... @wraps(f)
... def wrapper(*args, **kwds):
... print 'Calling decorated function'
... return f(*args, **kwds)
... return wrapper
...
>>> @my_decorator
... def example():
... """Docstring"""
... print 'Called example function'
...
>>> example()
Calling decorated function
Called example function
>>> example.__name__
'example'
>>> example.__doc__
'Docstring'
Run Code Online (Sandbox Code Playgroud)
如果不使用这个装饰器工厂,示例函数的名称将是'wrapper',原始example()的docstring将丢失.