tags:

views:

58

answers:

1
from functools import  wraps

def a():
    a='aa'
def b():
    b="bbb"

c=wraps(a)(b)
print c#what happen?

what is the wraps mean,example is the best.

thanks.

+4  A: 

Quoted from the documentation:

functools.wraps(wrapped[, assigned][, updated]) 

This is a convenience function for invoking partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated) as a function decorator when defining a wrapper function. For example:

>>> 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'

Without the use of this decorator factory, the name of the example function would have been 'wrapper', and the docstring of the original example() would have been lost.

Tim Pietzcker