blob: 7d59ec9187df454b3ee970f821bf77df6d232c4b [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):
216 newkeywords = keywords.copy()
217 newkeywords.update(fkeywords)
Martin Panter0c0da482016-06-12 01:46:50 +0000218 return func(*args, *fargs, **newkeywords)
Georg Brandl116aa622007-08-15 14:28:22 +0000219 newfunc.func = func
220 newfunc.args = args
221 newfunc.keywords = keywords
222 return newfunc
223
224 The :func:`partial` is used for partial function application which "freezes"
225 some portion of a function's arguments and/or keywords resulting in a new object
226 with a simplified signature. For example, :func:`partial` can be used to create
227 a callable that behaves like the :func:`int` function where the *base* argument
Christian Heimesfe337bf2008-03-23 21:54:12 +0000228 defaults to two:
Georg Brandl116aa622007-08-15 14:28:22 +0000229
Christian Heimesfe337bf2008-03-23 21:54:12 +0000230 >>> from functools import partial
Georg Brandl116aa622007-08-15 14:28:22 +0000231 >>> basetwo = partial(int, base=2)
232 >>> basetwo.__doc__ = 'Convert base 2 string to an int.'
233 >>> basetwo('10010')
234 18
235
236
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000237.. class:: partialmethod(func, *args, **keywords)
238
239 Return a new :class:`partialmethod` descriptor which behaves
240 like :class:`partial` except that it is designed to be used as a method
241 definition rather than being directly callable.
242
243 *func* must be a :term:`descriptor` or a callable (objects which are both,
244 like normal functions, are handled as descriptors).
245
246 When *func* is a descriptor (such as a normal Python function,
247 :func:`classmethod`, :func:`staticmethod`, :func:`abstractmethod` or
248 another instance of :class:`partialmethod`), calls to ``__get__`` are
249 delegated to the underlying descriptor, and an appropriate
250 :class:`partial` object returned as the result.
251
252 When *func* is a non-descriptor callable, an appropriate bound method is
253 created dynamically. This behaves like a normal Python function when
254 used as a method: the *self* argument will be inserted as the first
255 positional argument, even before the *args* and *keywords* supplied to
256 the :class:`partialmethod` constructor.
257
258 Example::
259
260 >>> class Cell(object):
Benjamin Peterson3a434032014-03-30 15:07:09 -0400261 ... def __init__(self):
262 ... self._alive = False
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000263 ... @property
264 ... def alive(self):
265 ... return self._alive
266 ... def set_state(self, state):
267 ... self._alive = bool(state)
Nick Coghlan3daaf5f2013-11-04 23:32:16 +1000268 ... set_alive = partialmethod(set_state, True)
269 ... set_dead = partialmethod(set_state, False)
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000270 ...
271 >>> c = Cell()
272 >>> c.alive
273 False
274 >>> c.set_alive()
275 >>> c.alive
276 True
277
278 .. versionadded:: 3.4
279
280
Georg Brandl58f9e4f2008-04-19 22:18:33 +0000281.. function:: reduce(function, iterable[, initializer])
Georg Brandl116aa622007-08-15 14:28:22 +0000282
Brendan Jurd9df10022018-10-01 16:52:10 +1000283 Apply *function* of two arguments cumulatively to the items of *iterable*, from
284 left to right, so as to reduce the iterable to a single value. For example,
Georg Brandl116aa622007-08-15 14:28:22 +0000285 ``reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])`` calculates ``((((1+2)+3)+4)+5)``.
286 The left argument, *x*, is the accumulated value and the right argument, *y*, is
Brendan Jurd9df10022018-10-01 16:52:10 +1000287 the update value from the *iterable*. If the optional *initializer* is present,
288 it is placed before the items of the iterable in the calculation, and serves as
289 a default when the iterable is empty. If *initializer* is not given and
290 *iterable* contains only one item, the first item is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000291
Raymond Hettinger558dcf32014-12-16 18:16:57 -0800292 Roughly equivalent to::
Raymond Hettinger64801682013-10-12 16:04:17 -0700293
294 def reduce(function, iterable, initializer=None):
295 it = iter(iterable)
296 if initializer is None:
297 value = next(it)
298 else:
299 value = initializer
300 for element in it:
301 value = function(value, element)
302 return value
303
Gerrit Hollbd81cbd2018-07-04 23:26:32 +0100304 See :func:`itertools.accumulate` for an iterator that yields all intermediate
305 values.
Georg Brandl116aa622007-08-15 14:28:22 +0000306
Daisuke Miyakawa0e61e672017-10-12 23:39:43 +0900307.. decorator:: singledispatch
Łukasz Langa6f692512013-06-05 12:20:24 +0200308
Daisuke Miyakawa0e61e672017-10-12 23:39:43 +0900309 Transform a function into a :term:`single-dispatch <single
Łukasz Langafdcf2b72013-06-07 22:54:03 +0200310 dispatch>` :term:`generic function`.
Łukasz Langa6f692512013-06-05 12:20:24 +0200311
312 To define a generic function, decorate it with the ``@singledispatch``
313 decorator. Note that the dispatch happens on the type of the first argument,
314 create your function accordingly::
315
316 >>> from functools import singledispatch
317 >>> @singledispatch
318 ... def fun(arg, verbose=False):
319 ... if verbose:
320 ... print("Let me just say,", end=" ")
321 ... print(arg)
322
323 To add overloaded implementations to the function, use the :func:`register`
Łukasz Langae5697532017-12-11 13:56:31 -0800324 attribute of the generic function. It is a decorator. For functions
325 annotated with types, the decorator will infer the type of the first
326 argument automatically::
Łukasz Langa6f692512013-06-05 12:20:24 +0200327
Łukasz Langae5697532017-12-11 13:56:31 -0800328 >>> @fun.register
329 ... def _(arg: int, verbose=False):
Łukasz Langa6f692512013-06-05 12:20:24 +0200330 ... if verbose:
331 ... print("Strength in numbers, eh?", end=" ")
332 ... print(arg)
333 ...
Łukasz Langae5697532017-12-11 13:56:31 -0800334 >>> @fun.register
335 ... def _(arg: list, verbose=False):
Łukasz Langa6f692512013-06-05 12:20:24 +0200336 ... if verbose:
337 ... print("Enumerate this:")
338 ... for i, elem in enumerate(arg):
339 ... print(i, elem)
340
Łukasz Langae5697532017-12-11 13:56:31 -0800341 For code which doesn't use type annotations, the appropriate type
342 argument can be passed explicitly to the decorator itself::
343
344 >>> @fun.register(complex)
345 ... def _(arg, verbose=False):
346 ... if verbose:
347 ... print("Better than complicated.", end=" ")
348 ... print(arg.real, arg.imag)
349 ...
350
351
Łukasz Langa6f692512013-06-05 12:20:24 +0200352 To enable registering lambdas and pre-existing functions, the
353 :func:`register` attribute can be used in a functional form::
354
355 >>> def nothing(arg, verbose=False):
356 ... print("Nothing.")
357 ...
358 >>> fun.register(type(None), nothing)
359
360 The :func:`register` attribute returns the undecorated function which
361 enables decorator stacking, pickling, as well as creating unit tests for
362 each variant independently::
363
364 >>> @fun.register(float)
365 ... @fun.register(Decimal)
366 ... def fun_num(arg, verbose=False):
367 ... if verbose:
368 ... print("Half of your number:", end=" ")
369 ... print(arg / 2)
370 ...
371 >>> fun_num is fun
372 False
373
374 When called, the generic function dispatches on the type of the first
375 argument::
376
377 >>> fun("Hello, world.")
378 Hello, world.
379 >>> fun("test.", verbose=True)
380 Let me just say, test.
381 >>> fun(42, verbose=True)
382 Strength in numbers, eh? 42
383 >>> fun(['spam', 'spam', 'eggs', 'spam'], verbose=True)
384 Enumerate this:
385 0 spam
386 1 spam
387 2 eggs
388 3 spam
389 >>> fun(None)
390 Nothing.
391 >>> fun(1.23)
392 0.615
393
394 Where there is no registered implementation for a specific type, its
395 method resolution order is used to find a more generic implementation.
396 The original function decorated with ``@singledispatch`` is registered
397 for the base ``object`` type, which means it is used if no better
398 implementation is found.
399
400 To check which implementation will the generic function choose for
401 a given type, use the ``dispatch()`` attribute::
402
403 >>> fun.dispatch(float)
404 <function fun_num at 0x1035a2840>
405 >>> fun.dispatch(dict) # note: default implementation
406 <function fun at 0x103fe0000>
407
408 To access all registered implementations, use the read-only ``registry``
409 attribute::
410
411 >>> fun.registry.keys()
412 dict_keys([<class 'NoneType'>, <class 'int'>, <class 'object'>,
413 <class 'decimal.Decimal'>, <class 'list'>,
414 <class 'float'>])
415 >>> fun.registry[float]
416 <function fun_num at 0x1035a2840>
417 >>> fun.registry[object]
418 <function fun at 0x103fe0000>
419
420 .. versionadded:: 3.4
421
Łukasz Langae5697532017-12-11 13:56:31 -0800422 .. versionchanged:: 3.7
423 The :func:`register` attribute supports using type annotations.
424
Łukasz Langa6f692512013-06-05 12:20:24 +0200425
Ethan Smithc6512752018-05-26 16:38:33 -0400426.. class:: singledispatchmethod(func)
427
428 Transform a method into a :term:`single-dispatch <single
429 dispatch>` :term:`generic function`.
430
431 To define a generic method, decorate it with the ``@singledispatchmethod``
432 decorator. Note that the dispatch happens on the type of the first non-self
433 or non-cls argument, create your function accordingly::
434
435 class Negator:
436 @singledispatchmethod
437 def neg(self, arg):
438 raise NotImplementedError("Cannot negate a")
439
440 @neg.register
441 def _(self, arg: int):
442 return -arg
443
444 @neg.register
445 def _(self, arg: bool):
446 return not arg
447
448 ``@singledispatchmethod`` supports nesting with other decorators such as
449 ``@classmethod``. Note that to allow for ``dispatcher.register``,
450 ``singledispatchmethod`` must be the *outer most* decorator. Here is the
451 ``Negator`` class with the ``neg`` methods being class bound::
452
453 class Negator:
454 @singledispatchmethod
455 @classmethod
456 def neg(cls, arg):
457 raise NotImplementedError("Cannot negate a")
458
459 @neg.register
460 @classmethod
461 def _(cls, arg: int):
462 return -arg
463
464 @neg.register
465 @classmethod
466 def _(cls, arg: bool):
467 return not arg
468
469 The same pattern can be used for other similar decorators: ``staticmethod``,
470 ``abstractmethod``, and others.
471
Georg Brandl036490d2009-05-17 13:00:36 +0000472.. function:: update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Georg Brandl116aa622007-08-15 14:28:22 +0000473
474 Update a *wrapper* function to look like the *wrapped* function. The optional
475 arguments are tuples to specify which attributes of the original function are
476 assigned directly to the matching attributes on the wrapper function and which
477 attributes of the wrapper function are updated with the corresponding attributes
478 from the original function. The default values for these arguments are the
Berker Peksag472233e2016-04-18 21:20:50 +0300479 module level constants ``WRAPPER_ASSIGNMENTS`` (which assigns to the wrapper
480 function's ``__module__``, ``__name__``, ``__qualname__``, ``__annotations__``
481 and ``__doc__``, the documentation string) and ``WRAPPER_UPDATES`` (which
482 updates the wrapper function's ``__dict__``, i.e. the instance dictionary).
Georg Brandl116aa622007-08-15 14:28:22 +0000483
Nick Coghlan98876832010-08-17 06:17:18 +0000484 To allow access to the original function for introspection and other purposes
485 (e.g. bypassing a caching decorator such as :func:`lru_cache`), this function
Nick Coghlan24c05bc2013-07-15 21:13:08 +1000486 automatically adds a ``__wrapped__`` attribute to the wrapper that refers to
487 the function being wrapped.
Nick Coghlan98876832010-08-17 06:17:18 +0000488
Christian Heimesd8654cf2007-12-02 15:22:16 +0000489 The main intended use for this function is in :term:`decorator` functions which
490 wrap the decorated function and return the wrapper. If the wrapper function is
491 not updated, the metadata of the returned function will reflect the wrapper
Georg Brandl116aa622007-08-15 14:28:22 +0000492 definition rather than the original function definition, which is typically less
493 than helpful.
494
Nick Coghlan98876832010-08-17 06:17:18 +0000495 :func:`update_wrapper` may be used with callables other than functions. Any
496 attributes named in *assigned* or *updated* that are missing from the object
497 being wrapped are ignored (i.e. this function will not attempt to set them
498 on the wrapper function). :exc:`AttributeError` is still raised if the
499 wrapper function itself is missing any attributes named in *updated*.
500
501 .. versionadded:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000502 Automatic addition of the ``__wrapped__`` attribute.
Nick Coghlan98876832010-08-17 06:17:18 +0000503
504 .. versionadded:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000505 Copying of the ``__annotations__`` attribute by default.
Nick Coghlan98876832010-08-17 06:17:18 +0000506
507 .. versionchanged:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000508 Missing attributes no longer trigger an :exc:`AttributeError`.
509
Nick Coghlan24c05bc2013-07-15 21:13:08 +1000510 .. versionchanged:: 3.4
511 The ``__wrapped__`` attribute now always refers to the wrapped
512 function, even if that function defined a ``__wrapped__`` attribute.
513 (see :issue:`17482`)
514
Georg Brandl116aa622007-08-15 14:28:22 +0000515
Georg Brandl8a1caa22010-07-29 16:01:11 +0000516.. decorator:: wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Georg Brandl116aa622007-08-15 14:28:22 +0000517
Ezio Melotti67f6d5f2014-08-05 08:14:28 +0300518 This is a convenience function for invoking :func:`update_wrapper` as a
519 function decorator when defining a wrapper function. It is equivalent to
520 ``partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)``.
521 For example::
Georg Brandl116aa622007-08-15 14:28:22 +0000522
Christian Heimesfe337bf2008-03-23 21:54:12 +0000523 >>> from functools import wraps
Georg Brandl116aa622007-08-15 14:28:22 +0000524 >>> def my_decorator(f):
525 ... @wraps(f)
526 ... def wrapper(*args, **kwds):
Georg Brandl6911e3c2007-09-04 07:15:32 +0000527 ... print('Calling decorated function')
Georg Brandl116aa622007-08-15 14:28:22 +0000528 ... return f(*args, **kwds)
529 ... return wrapper
530 ...
531 >>> @my_decorator
532 ... def example():
533 ... """Docstring"""
Georg Brandl6911e3c2007-09-04 07:15:32 +0000534 ... print('Called example function')
Georg Brandl116aa622007-08-15 14:28:22 +0000535 ...
536 >>> example()
537 Calling decorated function
538 Called example function
539 >>> example.__name__
540 'example'
541 >>> example.__doc__
542 'Docstring'
543
544 Without the use of this decorator factory, the name of the example function
545 would have been ``'wrapper'``, and the docstring of the original :func:`example`
546 would have been lost.
547
548
549.. _partial-objects:
550
551:class:`partial` Objects
552------------------------
553
554:class:`partial` objects are callable objects created by :func:`partial`. They
555have three read-only attributes:
556
557
558.. attribute:: partial.func
559
560 A callable object or function. Calls to the :class:`partial` object will be
561 forwarded to :attr:`func` with new arguments and keywords.
562
563
564.. attribute:: partial.args
565
566 The leftmost positional arguments that will be prepended to the positional
567 arguments provided to a :class:`partial` object call.
568
569
570.. attribute:: partial.keywords
571
572 The keyword arguments that will be supplied when the :class:`partial` object is
573 called.
574
575:class:`partial` objects are like :class:`function` objects in that they are
576callable, weak referencable, and can have attributes. There are some important
Martin Panterbae5d812016-06-18 03:57:31 +0000577differences. For instance, the :attr:`~definition.__name__` and :attr:`__doc__` attributes
Georg Brandl116aa622007-08-15 14:28:22 +0000578are not created automatically. Also, :class:`partial` objects defined in
579classes behave like static methods and do not transform into bound methods
580during instance attribute look-up.