[docs] [issue21928] Incorrect reference to partial() in functools.wraps documentation
Ezio Melotti
report at bugs.python.org
Sat Jul 12 19:20:50 CEST 2014
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 <report at bugs.python.org>
<http://bugs.python.org/issue21928>
_______________________________________
More information about the docs
mailing list