blob: ec3d5a529e658e47d7f34f173abbab4be8605dcb [file] [log] [blame]
Georg Brandl6c89a792012-01-25 22:36:25 +01001:mod:`functools` --- Higher-order functions and operations on callable objects
Georg Brandl116aa622007-08-15 14:28:22 +00002==============================================================================
3
4.. module:: functools
Georg Brandl6c89a792012-01-25 22:36:25 +01005 :synopsis: Higher-order functions and operations on callable objects.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Georg Brandl116aa622007-08-15 14:28:22 +00007.. moduleauthor:: Peter Harris <scav@blueyonder.co.uk>
8.. moduleauthor:: Raymond Hettinger <python@rcn.com>
9.. moduleauthor:: Nick Coghlan <ncoghlan@gmail.com>
Łukasz Langa6f692512013-06-05 12:20:24 +020010.. moduleauthor:: Łukasz Langa <lukasz@langa.pl>
Georg Brandl116aa622007-08-15 14:28:22 +000011.. sectionauthor:: Peter Harris <scav@blueyonder.co.uk>
12
Raymond Hettinger05ce0792011-01-10 21:16:07 +000013**Source code:** :source:`Lib/functools.py`
14
15--------------
Georg Brandl116aa622007-08-15 14:28:22 +000016
Georg Brandl116aa622007-08-15 14:28:22 +000017The :mod:`functools` module is for higher-order functions: functions that act on
18or return other functions. In general, any callable object can be treated as a
19function for the purposes of this module.
20
Thomas Woutersed03b412007-08-28 21:37:11 +000021The :mod:`functools` module defines the following functions:
22
Carl Meyerd658dea2018-08-28 01:11:56 -060023.. decorator:: cached_property(func)
24
25 Transform a method of a class into a property whose value is computed once
26 and then cached as a normal attribute for the life of the instance. Similar
27 to :func:`property`, with the addition of caching. Useful for expensive
28 computed properties of instances that are otherwise effectively immutable.
29
30 Example::
31
32 class DataSet:
33 def __init__(self, sequence_of_numbers):
34 self._data = sequence_of_numbers
35
36 @cached_property
37 def stdev(self):
38 return statistics.stdev(self._data)
39
40 @cached_property
41 def variance(self):
42 return statistics.variance(self._data)
43
44 .. versionadded:: 3.8
45
46 .. note::
47
48 This decorator requires that the ``__dict__`` attribute on each instance
49 be a mutable mapping. This means it will not work with some types, such as
50 metaclasses (since the ``__dict__`` attributes on type instances are
51 read-only proxies for the class namespace), and those that specify
52 ``__slots__`` without including ``__dict__`` as one of the defined slots
53 (as such classes don't provide a ``__dict__`` attribute at all).
54
55
Éric Araujob10089e2010-11-18 14:22:08 +000056.. function:: cmp_to_key(func)
Raymond Hettingerc50846a2010-04-05 18:56:31 +000057
Raymond Hettinger86e9b6b2014-11-09 17:20:56 -080058 Transform an old-style comparison function to a :term:`key function`. Used
59 with tools that accept key functions (such as :func:`sorted`, :func:`min`,
Benjamin Petersoncca65312010-08-09 02:13:10 +000060 :func:`max`, :func:`heapq.nlargest`, :func:`heapq.nsmallest`,
61 :func:`itertools.groupby`). This function is primarily used as a transition
Ezio Melotti9ecb6be2012-01-16 08:28:54 +020062 tool for programs being converted from Python 2 which supported the use of
Benjamin Petersoncca65312010-08-09 02:13:10 +000063 comparison functions.
Raymond Hettingerc50846a2010-04-05 18:56:31 +000064
Georg Brandl6c89a792012-01-25 22:36:25 +010065 A comparison function is any callable that accept two arguments, compares them,
Benjamin Petersoncca65312010-08-09 02:13:10 +000066 and returns a negative number for less-than, zero for equality, or a positive
67 number for greater-than. A key function is a callable that accepts one
Raymond Hettinger86e9b6b2014-11-09 17:20:56 -080068 argument and returns another value to be used as the sort key.
Raymond Hettingerc50846a2010-04-05 18:56:31 +000069
Benjamin Petersoncca65312010-08-09 02:13:10 +000070 Example::
Raymond Hettingerc50846a2010-04-05 18:56:31 +000071
Benjamin Petersoncca65312010-08-09 02:13:10 +000072 sorted(iterable, key=cmp_to_key(locale.strcoll)) # locale-aware sort order
Raymond Hettingerc50846a2010-04-05 18:56:31 +000073
Raymond Hettinger86e9b6b2014-11-09 17:20:56 -080074 For sorting examples and a brief sorting tutorial, see :ref:`sortinghowto`.
75
Raymond Hettingerc50846a2010-04-05 18:56:31 +000076 .. versionadded:: 3.2
77
Georg Brandl67b21b72010-08-17 15:07:14 +000078
Raymond Hettinger010ce322012-05-19 21:20:48 -070079.. decorator:: lru_cache(maxsize=128, typed=False)
Georg Brandl2e7346a2010-07-31 18:09:23 +000080
81 Decorator to wrap a function with a memoizing callable that saves up to the
82 *maxsize* most recent calls. It can save time when an expensive or I/O bound
83 function is periodically called with the same arguments.
84
Raymond Hettinger7496b412010-11-30 19:15:45 +000085 Since a dictionary is used to cache results, the positional and keyword
86 arguments to the function must be hashable.
Georg Brandl2e7346a2010-07-31 18:09:23 +000087
Raymond Hettinger902bcd92018-09-14 00:53:20 -070088 Distinct argument patterns may be considered to be distinct calls with
89 separate cache entries. For example, `f(a=1, b=2)` and `f(b=2, a=1)`
90 differ in their keyword argument order and may have two separate cache
91 entries.
92
Serhiy Storchakaecf41da2016-10-19 16:29:26 +030093 If *maxsize* is set to ``None``, the LRU feature is disabled and the cache can
Raymond Hettinger7d74eff2012-06-04 00:32:15 -070094 grow without bound. The LRU feature performs best when *maxsize* is a
95 power-of-two.
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +000096
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +030097 If *typed* is set to true, function arguments of different types will be
Raymond Hettingercd9fdfd2011-10-20 08:57:45 -070098 cached separately. For example, ``f(3)`` and ``f(3.0)`` will be treated
99 as distinct calls with distinct results.
100
Raymond Hettinger7496b412010-11-30 19:15:45 +0000101 To help measure the effectiveness of the cache and tune the *maxsize*
102 parameter, the wrapped function is instrumented with a :func:`cache_info`
103 function that returns a :term:`named tuple` showing *hits*, *misses*,
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000104 *maxsize* and *currsize*. In a multi-threaded environment, the hits
105 and misses are approximate.
Nick Coghlan234515a2010-11-30 06:19:46 +0000106
Raymond Hettinger7496b412010-11-30 19:15:45 +0000107 The decorator also provides a :func:`cache_clear` function for clearing or
108 invalidating the cache.
Georg Brandl2e7346a2010-07-31 18:09:23 +0000109
Raymond Hettinger3fccfcb2010-08-17 19:19:29 +0000110 The original underlying function is accessible through the
Raymond Hettinger7496b412010-11-30 19:15:45 +0000111 :attr:`__wrapped__` attribute. This is useful for introspection, for
112 bypassing the cache, or for rewrapping the function with a different cache.
Nick Coghlan98876832010-08-17 06:17:18 +0000113
Raymond Hettingercc038582010-11-30 20:02:57 +0000114 An `LRU (least recently used) cache
Georg Brandl5d941342016-02-26 19:37:12 +0100115 <https://en.wikipedia.org/wiki/Cache_algorithms#Examples>`_ works
Raymond Hettingercd9fdfd2011-10-20 08:57:45 -0700116 best when the most recent calls are the best predictors of upcoming calls (for
117 example, the most popular articles on a news server tend to change each day).
Raymond Hettinger7496b412010-11-30 19:15:45 +0000118 The cache's size limit assures that the cache does not grow without bound on
119 long-running processes such as web servers.
120
Raymond Hettingercc038582010-11-30 20:02:57 +0000121 Example of an LRU cache for static web content::
Raymond Hettinger7496b412010-11-30 19:15:45 +0000122
Raymond Hettinger17328e42013-04-06 20:27:33 -0700123 @lru_cache(maxsize=32)
Raymond Hettinger7496b412010-11-30 19:15:45 +0000124 def get_pep(num):
125 'Retrieve text of a Python Enhancement Proposal'
126 resource = 'http://www.python.org/dev/peps/pep-%04d/' % num
127 try:
128 with urllib.request.urlopen(resource) as s:
129 return s.read()
130 except urllib.error.HTTPError:
131 return 'Not Found'
132
133 >>> for n in 8, 290, 308, 320, 8, 218, 320, 279, 289, 320, 9991:
134 ... pep = get_pep(n)
135 ... print(n, len(pep))
136
Raymond Hettinger17328e42013-04-06 20:27:33 -0700137 >>> get_pep.cache_info()
138 CacheInfo(hits=3, misses=8, maxsize=32, currsize=8)
Georg Brandl2e7346a2010-07-31 18:09:23 +0000139
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000140 Example of efficiently computing
Georg Brandl5d941342016-02-26 19:37:12 +0100141 `Fibonacci numbers <https://en.wikipedia.org/wiki/Fibonacci_number>`_
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000142 using a cache to implement a
Georg Brandl5d941342016-02-26 19:37:12 +0100143 `dynamic programming <https://en.wikipedia.org/wiki/Dynamic_programming>`_
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000144 technique::
145
146 @lru_cache(maxsize=None)
147 def fib(n):
148 if n < 2:
149 return n
150 return fib(n-1) + fib(n-2)
151
Raymond Hettinger17328e42013-04-06 20:27:33 -0700152 >>> [fib(n) for n in range(16)]
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000153 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
154
Raymond Hettinger17328e42013-04-06 20:27:33 -0700155 >>> fib.cache_info()
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000156 CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)
157
Georg Brandl2e7346a2010-07-31 18:09:23 +0000158 .. versionadded:: 3.2
159
Raymond Hettingercd9fdfd2011-10-20 08:57:45 -0700160 .. versionchanged:: 3.3
161 Added the *typed* option.
162
Georg Brandl8a1caa22010-07-29 16:01:11 +0000163.. decorator:: total_ordering
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000164
165 Given a class defining one or more rich comparison ordering methods, this
Benjamin Peterson08bf91c2010-04-11 16:12:57 +0000166 class decorator supplies the rest. This simplifies the effort involved
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000167 in specifying all of the possible rich comparison operations:
168
169 The class must define one of :meth:`__lt__`, :meth:`__le__`,
170 :meth:`__gt__`, or :meth:`__ge__`.
171 In addition, the class should supply an :meth:`__eq__` method.
172
173 For example::
174
175 @total_ordering
176 class Student:
Nick Coghlanf05d9812013-10-02 00:02:03 +1000177 def _is_valid_operand(self, other):
178 return (hasattr(other, "lastname") and
179 hasattr(other, "firstname"))
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000180 def __eq__(self, other):
Nick Coghlanf05d9812013-10-02 00:02:03 +1000181 if not self._is_valid_operand(other):
182 return NotImplemented
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000183 return ((self.lastname.lower(), self.firstname.lower()) ==
184 (other.lastname.lower(), other.firstname.lower()))
185 def __lt__(self, other):
Nick Coghlanf05d9812013-10-02 00:02:03 +1000186 if not self._is_valid_operand(other):
187 return NotImplemented
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000188 return ((self.lastname.lower(), self.firstname.lower()) <
189 (other.lastname.lower(), other.firstname.lower()))
190
Nick Coghlanf05d9812013-10-02 00:02:03 +1000191 .. note::
192
193 While this decorator makes it easy to create well behaved totally
194 ordered types, it *does* come at the cost of slower execution and
195 more complex stack traces for the derived comparison methods. If
196 performance benchmarking indicates this is a bottleneck for a given
197 application, implementing all six rich comparison methods instead is
198 likely to provide an easy speed boost.
199
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000200 .. versionadded:: 3.2
201
Nick Coghlanf05d9812013-10-02 00:02:03 +1000202 .. versionchanged:: 3.4
203 Returning NotImplemented from the underlying comparison function for
204 unrecognised types is now supported.
Georg Brandl67b21b72010-08-17 15:07:14 +0000205
Georg Brandl036490d2009-05-17 13:00:36 +0000206.. function:: partial(func, *args, **keywords)
Georg Brandl116aa622007-08-15 14:28:22 +0000207
208 Return a new :class:`partial` object which when called will behave like *func*
209 called with the positional arguments *args* and keyword arguments *keywords*. If
210 more arguments are supplied to the call, they are appended to *args*. If
211 additional keyword arguments are supplied, they extend and override *keywords*.
212 Roughly equivalent to::
213
214 def partial(func, *args, **keywords):
215 def newfunc(*fargs, **fkeywords):
Sergey Fedoseevb981fec2018-10-20 02:42:07 +0500216 newkeywords = {**keywords, **fkeywords}
Martin Panter0c0da482016-06-12 01:46:50 +0000217 return func(*args, *fargs, **newkeywords)
Georg Brandl116aa622007-08-15 14:28:22 +0000218 newfunc.func = func
219 newfunc.args = args
220 newfunc.keywords = keywords
221 return newfunc
222
223 The :func:`partial` is used for partial function application which "freezes"
224 some portion of a function's arguments and/or keywords resulting in a new object
225 with a simplified signature. For example, :func:`partial` can be used to create
226 a callable that behaves like the :func:`int` function where the *base* argument
Christian Heimesfe337bf2008-03-23 21:54:12 +0000227 defaults to two:
Georg Brandl116aa622007-08-15 14:28:22 +0000228
Christian Heimesfe337bf2008-03-23 21:54:12 +0000229 >>> from functools import partial
Georg Brandl116aa622007-08-15 14:28:22 +0000230 >>> basetwo = partial(int, base=2)
231 >>> basetwo.__doc__ = 'Convert base 2 string to an int.'
232 >>> basetwo('10010')
233 18
234
235
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000236.. class:: partialmethod(func, *args, **keywords)
237
238 Return a new :class:`partialmethod` descriptor which behaves
239 like :class:`partial` except that it is designed to be used as a method
240 definition rather than being directly callable.
241
242 *func* must be a :term:`descriptor` or a callable (objects which are both,
243 like normal functions, are handled as descriptors).
244
245 When *func* is a descriptor (such as a normal Python function,
246 :func:`classmethod`, :func:`staticmethod`, :func:`abstractmethod` or
247 another instance of :class:`partialmethod`), calls to ``__get__`` are
248 delegated to the underlying descriptor, and an appropriate
249 :class:`partial` object returned as the result.
250
251 When *func* is a non-descriptor callable, an appropriate bound method is
252 created dynamically. This behaves like a normal Python function when
253 used as a method: the *self* argument will be inserted as the first
254 positional argument, even before the *args* and *keywords* supplied to
255 the :class:`partialmethod` constructor.
256
257 Example::
258
259 >>> class Cell(object):
Benjamin Peterson3a434032014-03-30 15:07:09 -0400260 ... def __init__(self):
261 ... self._alive = False
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000262 ... @property
263 ... def alive(self):
264 ... return self._alive
265 ... def set_state(self, state):
266 ... self._alive = bool(state)
Nick Coghlan3daaf5f2013-11-04 23:32:16 +1000267 ... set_alive = partialmethod(set_state, True)
268 ... set_dead = partialmethod(set_state, False)
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000269 ...
270 >>> c = Cell()
271 >>> c.alive
272 False
273 >>> c.set_alive()
274 >>> c.alive
275 True
276
277 .. versionadded:: 3.4
278
279
Georg Brandl58f9e4f2008-04-19 22:18:33 +0000280.. function:: reduce(function, iterable[, initializer])
Georg Brandl116aa622007-08-15 14:28:22 +0000281
Brendan Jurd9df10022018-10-01 16:52:10 +1000282 Apply *function* of two arguments cumulatively to the items of *iterable*, from
283 left to right, so as to reduce the iterable to a single value. For example,
Georg Brandl116aa622007-08-15 14:28:22 +0000284 ``reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])`` calculates ``((((1+2)+3)+4)+5)``.
285 The left argument, *x*, is the accumulated value and the right argument, *y*, is
Brendan Jurd9df10022018-10-01 16:52:10 +1000286 the update value from the *iterable*. If the optional *initializer* is present,
287 it is placed before the items of the iterable in the calculation, and serves as
288 a default when the iterable is empty. If *initializer* is not given and
289 *iterable* contains only one item, the first item is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000290
Raymond Hettinger558dcf32014-12-16 18:16:57 -0800291 Roughly equivalent to::
Raymond Hettinger64801682013-10-12 16:04:17 -0700292
293 def reduce(function, iterable, initializer=None):
294 it = iter(iterable)
295 if initializer is None:
296 value = next(it)
297 else:
298 value = initializer
299 for element in it:
300 value = function(value, element)
301 return value
302
Gerrit Hollbd81cbd2018-07-04 23:26:32 +0100303 See :func:`itertools.accumulate` for an iterator that yields all intermediate
304 values.
Georg Brandl116aa622007-08-15 14:28:22 +0000305
Daisuke Miyakawa0e61e672017-10-12 23:39:43 +0900306.. decorator:: singledispatch
Łukasz Langa6f692512013-06-05 12:20:24 +0200307
Daisuke Miyakawa0e61e672017-10-12 23:39:43 +0900308 Transform a function into a :term:`single-dispatch <single
Łukasz Langafdcf2b72013-06-07 22:54:03 +0200309 dispatch>` :term:`generic function`.
Łukasz Langa6f692512013-06-05 12:20:24 +0200310
311 To define a generic function, decorate it with the ``@singledispatch``
312 decorator. Note that the dispatch happens on the type of the first argument,
313 create your function accordingly::
314
315 >>> from functools import singledispatch
316 >>> @singledispatch
317 ... def fun(arg, verbose=False):
318 ... if verbose:
319 ... print("Let me just say,", end=" ")
320 ... print(arg)
321
322 To add overloaded implementations to the function, use the :func:`register`
Łukasz Langae5697532017-12-11 13:56:31 -0800323 attribute of the generic function. It is a decorator. For functions
324 annotated with types, the decorator will infer the type of the first
325 argument automatically::
Łukasz Langa6f692512013-06-05 12:20:24 +0200326
Łukasz Langae5697532017-12-11 13:56:31 -0800327 >>> @fun.register
328 ... def _(arg: int, verbose=False):
Łukasz Langa6f692512013-06-05 12:20:24 +0200329 ... if verbose:
330 ... print("Strength in numbers, eh?", end=" ")
331 ... print(arg)
332 ...
Łukasz Langae5697532017-12-11 13:56:31 -0800333 >>> @fun.register
334 ... def _(arg: list, verbose=False):
Łukasz Langa6f692512013-06-05 12:20:24 +0200335 ... if verbose:
336 ... print("Enumerate this:")
337 ... for i, elem in enumerate(arg):
338 ... print(i, elem)
339
Łukasz Langae5697532017-12-11 13:56:31 -0800340 For code which doesn't use type annotations, the appropriate type
341 argument can be passed explicitly to the decorator itself::
342
343 >>> @fun.register(complex)
344 ... def _(arg, verbose=False):
345 ... if verbose:
346 ... print("Better than complicated.", end=" ")
347 ... print(arg.real, arg.imag)
348 ...
349
350
Łukasz Langa6f692512013-06-05 12:20:24 +0200351 To enable registering lambdas and pre-existing functions, the
352 :func:`register` attribute can be used in a functional form::
353
354 >>> def nothing(arg, verbose=False):
355 ... print("Nothing.")
356 ...
357 >>> fun.register(type(None), nothing)
358
359 The :func:`register` attribute returns the undecorated function which
360 enables decorator stacking, pickling, as well as creating unit tests for
361 each variant independently::
362
363 >>> @fun.register(float)
364 ... @fun.register(Decimal)
365 ... def fun_num(arg, verbose=False):
366 ... if verbose:
367 ... print("Half of your number:", end=" ")
368 ... print(arg / 2)
369 ...
370 >>> fun_num is fun
371 False
372
373 When called, the generic function dispatches on the type of the first
374 argument::
375
376 >>> fun("Hello, world.")
377 Hello, world.
378 >>> fun("test.", verbose=True)
379 Let me just say, test.
380 >>> fun(42, verbose=True)
381 Strength in numbers, eh? 42
382 >>> fun(['spam', 'spam', 'eggs', 'spam'], verbose=True)
383 Enumerate this:
384 0 spam
385 1 spam
386 2 eggs
387 3 spam
388 >>> fun(None)
389 Nothing.
390 >>> fun(1.23)
391 0.615
392
393 Where there is no registered implementation for a specific type, its
394 method resolution order is used to find a more generic implementation.
395 The original function decorated with ``@singledispatch`` is registered
396 for the base ``object`` type, which means it is used if no better
397 implementation is found.
398
399 To check which implementation will the generic function choose for
400 a given type, use the ``dispatch()`` attribute::
401
402 >>> fun.dispatch(float)
403 <function fun_num at 0x1035a2840>
404 >>> fun.dispatch(dict) # note: default implementation
405 <function fun at 0x103fe0000>
406
407 To access all registered implementations, use the read-only ``registry``
408 attribute::
409
410 >>> fun.registry.keys()
411 dict_keys([<class 'NoneType'>, <class 'int'>, <class 'object'>,
412 <class 'decimal.Decimal'>, <class 'list'>,
413 <class 'float'>])
414 >>> fun.registry[float]
415 <function fun_num at 0x1035a2840>
416 >>> fun.registry[object]
417 <function fun at 0x103fe0000>
418
419 .. versionadded:: 3.4
420
Łukasz Langae5697532017-12-11 13:56:31 -0800421 .. versionchanged:: 3.7
422 The :func:`register` attribute supports using type annotations.
423
Łukasz Langa6f692512013-06-05 12:20:24 +0200424
Ethan Smithc6512752018-05-26 16:38:33 -0400425.. class:: singledispatchmethod(func)
426
427 Transform a method into a :term:`single-dispatch <single
428 dispatch>` :term:`generic function`.
429
430 To define a generic method, decorate it with the ``@singledispatchmethod``
431 decorator. Note that the dispatch happens on the type of the first non-self
432 or non-cls argument, create your function accordingly::
433
434 class Negator:
435 @singledispatchmethod
436 def neg(self, arg):
437 raise NotImplementedError("Cannot negate a")
438
439 @neg.register
440 def _(self, arg: int):
441 return -arg
442
443 @neg.register
444 def _(self, arg: bool):
445 return not arg
446
447 ``@singledispatchmethod`` supports nesting with other decorators such as
448 ``@classmethod``. Note that to allow for ``dispatcher.register``,
449 ``singledispatchmethod`` must be the *outer most* decorator. Here is the
450 ``Negator`` class with the ``neg`` methods being class bound::
451
452 class Negator:
453 @singledispatchmethod
454 @classmethod
455 def neg(cls, arg):
456 raise NotImplementedError("Cannot negate a")
457
458 @neg.register
459 @classmethod
460 def _(cls, arg: int):
461 return -arg
462
463 @neg.register
464 @classmethod
465 def _(cls, arg: bool):
466 return not arg
467
468 The same pattern can be used for other similar decorators: ``staticmethod``,
469 ``abstractmethod``, and others.
470
Georg Brandl036490d2009-05-17 13:00:36 +0000471.. function:: update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Georg Brandl116aa622007-08-15 14:28:22 +0000472
473 Update a *wrapper* function to look like the *wrapped* function. The optional
474 arguments are tuples to specify which attributes of the original function are
475 assigned directly to the matching attributes on the wrapper function and which
476 attributes of the wrapper function are updated with the corresponding attributes
477 from the original function. The default values for these arguments are the
Berker Peksag472233e2016-04-18 21:20:50 +0300478 module level constants ``WRAPPER_ASSIGNMENTS`` (which assigns to the wrapper
479 function's ``__module__``, ``__name__``, ``__qualname__``, ``__annotations__``
480 and ``__doc__``, the documentation string) and ``WRAPPER_UPDATES`` (which
481 updates the wrapper function's ``__dict__``, i.e. the instance dictionary).
Georg Brandl116aa622007-08-15 14:28:22 +0000482
Nick Coghlan98876832010-08-17 06:17:18 +0000483 To allow access to the original function for introspection and other purposes
484 (e.g. bypassing a caching decorator such as :func:`lru_cache`), this function
Nick Coghlan24c05bc2013-07-15 21:13:08 +1000485 automatically adds a ``__wrapped__`` attribute to the wrapper that refers to
486 the function being wrapped.
Nick Coghlan98876832010-08-17 06:17:18 +0000487
Christian Heimesd8654cf2007-12-02 15:22:16 +0000488 The main intended use for this function is in :term:`decorator` functions which
489 wrap the decorated function and return the wrapper. If the wrapper function is
490 not updated, the metadata of the returned function will reflect the wrapper
Georg Brandl116aa622007-08-15 14:28:22 +0000491 definition rather than the original function definition, which is typically less
492 than helpful.
493
Nick Coghlan98876832010-08-17 06:17:18 +0000494 :func:`update_wrapper` may be used with callables other than functions. Any
495 attributes named in *assigned* or *updated* that are missing from the object
496 being wrapped are ignored (i.e. this function will not attempt to set them
497 on the wrapper function). :exc:`AttributeError` is still raised if the
498 wrapper function itself is missing any attributes named in *updated*.
499
500 .. versionadded:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000501 Automatic addition of the ``__wrapped__`` attribute.
Nick Coghlan98876832010-08-17 06:17:18 +0000502
503 .. versionadded:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000504 Copying of the ``__annotations__`` attribute by default.
Nick Coghlan98876832010-08-17 06:17:18 +0000505
506 .. versionchanged:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000507 Missing attributes no longer trigger an :exc:`AttributeError`.
508
Nick Coghlan24c05bc2013-07-15 21:13:08 +1000509 .. versionchanged:: 3.4
510 The ``__wrapped__`` attribute now always refers to the wrapped
511 function, even if that function defined a ``__wrapped__`` attribute.
512 (see :issue:`17482`)
513
Georg Brandl116aa622007-08-15 14:28:22 +0000514
Georg Brandl8a1caa22010-07-29 16:01:11 +0000515.. decorator:: wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Georg Brandl116aa622007-08-15 14:28:22 +0000516
Ezio Melotti67f6d5f2014-08-05 08:14:28 +0300517 This is a convenience function for invoking :func:`update_wrapper` as a
518 function decorator when defining a wrapper function. It is equivalent to
519 ``partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)``.
520 For example::
Georg Brandl116aa622007-08-15 14:28:22 +0000521
Christian Heimesfe337bf2008-03-23 21:54:12 +0000522 >>> from functools import wraps
Georg Brandl116aa622007-08-15 14:28:22 +0000523 >>> def my_decorator(f):
524 ... @wraps(f)
525 ... def wrapper(*args, **kwds):
Georg Brandl6911e3c2007-09-04 07:15:32 +0000526 ... print('Calling decorated function')
Georg Brandl116aa622007-08-15 14:28:22 +0000527 ... return f(*args, **kwds)
528 ... return wrapper
529 ...
530 >>> @my_decorator
531 ... def example():
532 ... """Docstring"""
Georg Brandl6911e3c2007-09-04 07:15:32 +0000533 ... print('Called example function')
Georg Brandl116aa622007-08-15 14:28:22 +0000534 ...
535 >>> example()
536 Calling decorated function
537 Called example function
538 >>> example.__name__
539 'example'
540 >>> example.__doc__
541 'Docstring'
542
543 Without the use of this decorator factory, the name of the example function
544 would have been ``'wrapper'``, and the docstring of the original :func:`example`
545 would have been lost.
546
547
548.. _partial-objects:
549
550:class:`partial` Objects
551------------------------
552
553:class:`partial` objects are callable objects created by :func:`partial`. They
554have three read-only attributes:
555
556
557.. attribute:: partial.func
558
559 A callable object or function. Calls to the :class:`partial` object will be
560 forwarded to :attr:`func` with new arguments and keywords.
561
562
563.. attribute:: partial.args
564
565 The leftmost positional arguments that will be prepended to the positional
566 arguments provided to a :class:`partial` object call.
567
568
569.. attribute:: partial.keywords
570
571 The keyword arguments that will be supplied when the :class:`partial` object is
572 called.
573
574:class:`partial` objects are like :class:`function` objects in that they are
575callable, weak referencable, and can have attributes. There are some important
Martin Panterbae5d812016-06-18 03:57:31 +0000576differences. For instance, the :attr:`~definition.__name__` and :attr:`__doc__` attributes
Georg Brandl116aa622007-08-15 14:28:22 +0000577are not created automatically. Also, :class:`partial` objects defined in
578classes behave like static methods and do not transform into bound methods
579during instance attribute look-up.