Ezio Melotti added the comment:

The docstring is correct, as this is how wraps is implemented (see 
Lib/functools.py#l73).
partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated) 
will return a partial version of update_wrapper() where only the wrapper 
argument is missing.  The missing argument is the function decorated with 
wraps().

For example, this code:

def my_decorator(f):
    @wraps(f)
    def wrapper(*args, **kwds):
        return f(*args, **kwds)
    return wrapper

is equivalent to:

def my_decorator(f):
    def wrapper(*args, **kwds):
        return f(*args, **kwds)
    wrapper = wraps(f)(wrapper)
    return wrapper

Here wraps(f) creates a partial version of update_wrapper, with only the 
"wrapped" argument (i.e. f) set.  When the partial object returned by wrap(f) 
gets called, the missing "wrapper" argument is received, thus making 
wraps(f)(wrapper) equivalent to:

def my_decorator(f):
    def wrapper(*args, **kwds):
        return f(*args, **kwds)
    wrapper = update_wrapper(wrapper, f)
    return wrapper


That said, I agree that the sentence you quoted is not too clear/intuitive, but 
the following example is quite clear, so I'm not sure it's worth to 
removing/rephrasing the first part.

Maybe it could say something like "This is a convenience function for invoking 
update_wrapper() (by using partial(update_wrapper, wrapped=wrapped, 
assigned=assigned, updated=updated)) as a function decorator when defining a 
wrapper function." instead?

----------
nosy: +ezio.melotti, r.david.murray, rhettinger, terry.reedy
status: open -> pending
type:  -> enhancement
versions: +Python 3.5

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue21928>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to