blob: cedc3ad5ec0a61f9ea9bec2d491bbcce883a2c92 [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 Hettingerb8218682019-05-26 11:27:35 -070079.. decorator:: lru_cache(user_function)
80 lru_cache(maxsize=128, typed=False)
Georg Brandl2e7346a2010-07-31 18:09:23 +000081
82 Decorator to wrap a function with a memoizing callable that saves up to the
83 *maxsize* most recent calls. It can save time when an expensive or I/O bound
84 function is periodically called with the same arguments.
85
Raymond Hettinger7496b412010-11-30 19:15:45 +000086 Since a dictionary is used to cache results, the positional and keyword
87 arguments to the function must be hashable.
Georg Brandl2e7346a2010-07-31 18:09:23 +000088
Raymond Hettinger902bcd92018-09-14 00:53:20 -070089 Distinct argument patterns may be considered to be distinct calls with
90 separate cache entries. For example, `f(a=1, b=2)` and `f(b=2, a=1)`
91 differ in their keyword argument order and may have two separate cache
92 entries.
93
Raymond Hettingerb8218682019-05-26 11:27:35 -070094 If *user_function* is specified, it must be a callable. This allows the
95 *lru_cache* decorator to be applied directly to a user function, leaving
96 the *maxsize* at its default value of 128::
97
98 @lru_cache
99 def count_vowels(sentence):
100 sentence = sentence.casefold()
101 return sum(sentence.count(vowel) for vowel in 'aeiou')
102
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300103 If *maxsize* is set to ``None``, the LRU feature is disabled and the cache can
Raymond Hettinger7d74eff2012-06-04 00:32:15 -0700104 grow without bound. The LRU feature performs best when *maxsize* is a
105 power-of-two.
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000106
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300107 If *typed* is set to true, function arguments of different types will be
Raymond Hettingercd9fdfd2011-10-20 08:57:45 -0700108 cached separately. For example, ``f(3)`` and ``f(3.0)`` will be treated
109 as distinct calls with distinct results.
110
Manjusaka051ff522019-11-12 15:30:18 +0800111 The wrapped function is instrumented with a :func:`cache_parameters`
112 function that returns a new :class:`dict` showing the values for *maxsize*
113 and *typed*. This is for information purposes only. Mutating the values
114 has no effect.
115
Raymond Hettinger7496b412010-11-30 19:15:45 +0000116 To help measure the effectiveness of the cache and tune the *maxsize*
117 parameter, the wrapped function is instrumented with a :func:`cache_info`
118 function that returns a :term:`named tuple` showing *hits*, *misses*,
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000119 *maxsize* and *currsize*. In a multi-threaded environment, the hits
120 and misses are approximate.
Nick Coghlan234515a2010-11-30 06:19:46 +0000121
Raymond Hettinger7496b412010-11-30 19:15:45 +0000122 The decorator also provides a :func:`cache_clear` function for clearing or
123 invalidating the cache.
Georg Brandl2e7346a2010-07-31 18:09:23 +0000124
Raymond Hettinger3fccfcb2010-08-17 19:19:29 +0000125 The original underlying function is accessible through the
Raymond Hettinger7496b412010-11-30 19:15:45 +0000126 :attr:`__wrapped__` attribute. This is useful for introspection, for
127 bypassing the cache, or for rewrapping the function with a different cache.
Nick Coghlan98876832010-08-17 06:17:18 +0000128
Raymond Hettingercc038582010-11-30 20:02:57 +0000129 An `LRU (least recently used) cache
Georg Brandl5d941342016-02-26 19:37:12 +0100130 <https://en.wikipedia.org/wiki/Cache_algorithms#Examples>`_ works
Raymond Hettingercd9fdfd2011-10-20 08:57:45 -0700131 best when the most recent calls are the best predictors of upcoming calls (for
132 example, the most popular articles on a news server tend to change each day).
Raymond Hettinger7496b412010-11-30 19:15:45 +0000133 The cache's size limit assures that the cache does not grow without bound on
134 long-running processes such as web servers.
135
Raymond Hettingerf0e0f202018-11-25 16:24:52 -0800136 In general, the LRU cache should only be used when you want to reuse
137 previously computed values. Accordingly, it doesn't make sense to cache
138 functions with side-effects, functions that need to create distinct mutable
139 objects on each call, or impure functions such as time() or random().
140
Raymond Hettingercc038582010-11-30 20:02:57 +0000141 Example of an LRU cache for static web content::
Raymond Hettinger7496b412010-11-30 19:15:45 +0000142
Raymond Hettinger17328e42013-04-06 20:27:33 -0700143 @lru_cache(maxsize=32)
Raymond Hettinger7496b412010-11-30 19:15:45 +0000144 def get_pep(num):
145 'Retrieve text of a Python Enhancement Proposal'
146 resource = 'http://www.python.org/dev/peps/pep-%04d/' % num
147 try:
148 with urllib.request.urlopen(resource) as s:
149 return s.read()
150 except urllib.error.HTTPError:
151 return 'Not Found'
152
153 >>> for n in 8, 290, 308, 320, 8, 218, 320, 279, 289, 320, 9991:
154 ... pep = get_pep(n)
155 ... print(n, len(pep))
156
Raymond Hettinger17328e42013-04-06 20:27:33 -0700157 >>> get_pep.cache_info()
158 CacheInfo(hits=3, misses=8, maxsize=32, currsize=8)
Georg Brandl2e7346a2010-07-31 18:09:23 +0000159
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000160 Example of efficiently computing
Georg Brandl5d941342016-02-26 19:37:12 +0100161 `Fibonacci numbers <https://en.wikipedia.org/wiki/Fibonacci_number>`_
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000162 using a cache to implement a
Georg Brandl5d941342016-02-26 19:37:12 +0100163 `dynamic programming <https://en.wikipedia.org/wiki/Dynamic_programming>`_
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000164 technique::
165
166 @lru_cache(maxsize=None)
167 def fib(n):
168 if n < 2:
169 return n
170 return fib(n-1) + fib(n-2)
171
Raymond Hettinger17328e42013-04-06 20:27:33 -0700172 >>> [fib(n) for n in range(16)]
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000173 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
174
Raymond Hettinger17328e42013-04-06 20:27:33 -0700175 >>> fib.cache_info()
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000176 CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)
177
Georg Brandl2e7346a2010-07-31 18:09:23 +0000178 .. versionadded:: 3.2
179
Raymond Hettingercd9fdfd2011-10-20 08:57:45 -0700180 .. versionchanged:: 3.3
181 Added the *typed* option.
182
Raymond Hettingerb8218682019-05-26 11:27:35 -0700183 .. versionchanged:: 3.8
184 Added the *user_function* option.
185
Manjusaka051ff522019-11-12 15:30:18 +0800186 .. versionadded:: 3.9
187 Added the function :func:`cache_parameters`
188
Georg Brandl8a1caa22010-07-29 16:01:11 +0000189.. decorator:: total_ordering
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000190
191 Given a class defining one or more rich comparison ordering methods, this
Benjamin Peterson08bf91c2010-04-11 16:12:57 +0000192 class decorator supplies the rest. This simplifies the effort involved
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000193 in specifying all of the possible rich comparison operations:
194
195 The class must define one of :meth:`__lt__`, :meth:`__le__`,
196 :meth:`__gt__`, or :meth:`__ge__`.
197 In addition, the class should supply an :meth:`__eq__` method.
198
199 For example::
200
201 @total_ordering
202 class Student:
Nick Coghlanf05d9812013-10-02 00:02:03 +1000203 def _is_valid_operand(self, other):
204 return (hasattr(other, "lastname") and
205 hasattr(other, "firstname"))
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000206 def __eq__(self, other):
Nick Coghlanf05d9812013-10-02 00:02:03 +1000207 if not self._is_valid_operand(other):
208 return NotImplemented
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000209 return ((self.lastname.lower(), self.firstname.lower()) ==
210 (other.lastname.lower(), other.firstname.lower()))
211 def __lt__(self, other):
Nick Coghlanf05d9812013-10-02 00:02:03 +1000212 if not self._is_valid_operand(other):
213 return NotImplemented
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000214 return ((self.lastname.lower(), self.firstname.lower()) <
215 (other.lastname.lower(), other.firstname.lower()))
216
Nick Coghlanf05d9812013-10-02 00:02:03 +1000217 .. note::
218
219 While this decorator makes it easy to create well behaved totally
220 ordered types, it *does* come at the cost of slower execution and
221 more complex stack traces for the derived comparison methods. If
222 performance benchmarking indicates this is a bottleneck for a given
223 application, implementing all six rich comparison methods instead is
224 likely to provide an easy speed boost.
225
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000226 .. versionadded:: 3.2
227
Nick Coghlanf05d9812013-10-02 00:02:03 +1000228 .. versionchanged:: 3.4
229 Returning NotImplemented from the underlying comparison function for
230 unrecognised types is now supported.
Georg Brandl67b21b72010-08-17 15:07:14 +0000231
Serhiy Storchaka2085bd02019-06-01 11:00:15 +0300232.. function:: partial(func, /, *args, **keywords)
Georg Brandl116aa622007-08-15 14:28:22 +0000233
Andrei Petre83a07652018-10-22 23:11:20 -0700234 Return a new :ref:`partial object<partial-objects>` which when called
235 will behave like *func* called with the positional arguments *args*
236 and keyword arguments *keywords*. If more arguments are supplied to the
237 call, they are appended to *args*. If additional keyword arguments are
238 supplied, they extend and override *keywords*.
Georg Brandl116aa622007-08-15 14:28:22 +0000239 Roughly equivalent to::
240
Serhiy Storchaka2085bd02019-06-01 11:00:15 +0300241 def partial(func, /, *args, **keywords):
Georg Brandl116aa622007-08-15 14:28:22 +0000242 def newfunc(*fargs, **fkeywords):
Sergey Fedoseevb981fec2018-10-20 02:42:07 +0500243 newkeywords = {**keywords, **fkeywords}
Martin Panter0c0da482016-06-12 01:46:50 +0000244 return func(*args, *fargs, **newkeywords)
Georg Brandl116aa622007-08-15 14:28:22 +0000245 newfunc.func = func
246 newfunc.args = args
247 newfunc.keywords = keywords
248 return newfunc
249
250 The :func:`partial` is used for partial function application which "freezes"
251 some portion of a function's arguments and/or keywords resulting in a new object
252 with a simplified signature. For example, :func:`partial` can be used to create
253 a callable that behaves like the :func:`int` function where the *base* argument
Christian Heimesfe337bf2008-03-23 21:54:12 +0000254 defaults to two:
Georg Brandl116aa622007-08-15 14:28:22 +0000255
Christian Heimesfe337bf2008-03-23 21:54:12 +0000256 >>> from functools import partial
Georg Brandl116aa622007-08-15 14:28:22 +0000257 >>> basetwo = partial(int, base=2)
258 >>> basetwo.__doc__ = 'Convert base 2 string to an int.'
259 >>> basetwo('10010')
260 18
261
262
Serhiy Storchaka70c5f2a2019-06-01 11:38:24 +0300263.. class:: partialmethod(func, /, *args, **keywords)
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000264
265 Return a new :class:`partialmethod` descriptor which behaves
266 like :class:`partial` except that it is designed to be used as a method
267 definition rather than being directly callable.
268
269 *func* must be a :term:`descriptor` or a callable (objects which are both,
270 like normal functions, are handled as descriptors).
271
272 When *func* is a descriptor (such as a normal Python function,
273 :func:`classmethod`, :func:`staticmethod`, :func:`abstractmethod` or
274 another instance of :class:`partialmethod`), calls to ``__get__`` are
275 delegated to the underlying descriptor, and an appropriate
Andrei Petre83a07652018-10-22 23:11:20 -0700276 :ref:`partial object<partial-objects>` returned as the result.
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000277
278 When *func* is a non-descriptor callable, an appropriate bound method is
279 created dynamically. This behaves like a normal Python function when
280 used as a method: the *self* argument will be inserted as the first
281 positional argument, even before the *args* and *keywords* supplied to
282 the :class:`partialmethod` constructor.
283
284 Example::
285
Serhiy Storchakae042a452019-06-10 13:35:52 +0300286 >>> class Cell:
Benjamin Peterson3a434032014-03-30 15:07:09 -0400287 ... def __init__(self):
288 ... self._alive = False
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000289 ... @property
290 ... def alive(self):
291 ... return self._alive
292 ... def set_state(self, state):
293 ... self._alive = bool(state)
Nick Coghlan3daaf5f2013-11-04 23:32:16 +1000294 ... set_alive = partialmethod(set_state, True)
295 ... set_dead = partialmethod(set_state, False)
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000296 ...
297 >>> c = Cell()
298 >>> c.alive
299 False
300 >>> c.set_alive()
301 >>> c.alive
302 True
303
304 .. versionadded:: 3.4
305
306
Georg Brandl58f9e4f2008-04-19 22:18:33 +0000307.. function:: reduce(function, iterable[, initializer])
Georg Brandl116aa622007-08-15 14:28:22 +0000308
Brendan Jurd9df10022018-10-01 16:52:10 +1000309 Apply *function* of two arguments cumulatively to the items of *iterable*, from
310 left to right, so as to reduce the iterable to a single value. For example,
Georg Brandl116aa622007-08-15 14:28:22 +0000311 ``reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])`` calculates ``((((1+2)+3)+4)+5)``.
312 The left argument, *x*, is the accumulated value and the right argument, *y*, is
Brendan Jurd9df10022018-10-01 16:52:10 +1000313 the update value from the *iterable*. If the optional *initializer* is present,
314 it is placed before the items of the iterable in the calculation, and serves as
315 a default when the iterable is empty. If *initializer* is not given and
316 *iterable* contains only one item, the first item is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000317
Raymond Hettinger558dcf32014-12-16 18:16:57 -0800318 Roughly equivalent to::
Raymond Hettinger64801682013-10-12 16:04:17 -0700319
320 def reduce(function, iterable, initializer=None):
321 it = iter(iterable)
322 if initializer is None:
323 value = next(it)
324 else:
325 value = initializer
326 for element in it:
327 value = function(value, element)
328 return value
329
Gerrit Hollbd81cbd2018-07-04 23:26:32 +0100330 See :func:`itertools.accumulate` for an iterator that yields all intermediate
331 values.
Georg Brandl116aa622007-08-15 14:28:22 +0000332
Daisuke Miyakawa0e61e672017-10-12 23:39:43 +0900333.. decorator:: singledispatch
Łukasz Langa6f692512013-06-05 12:20:24 +0200334
Daisuke Miyakawa0e61e672017-10-12 23:39:43 +0900335 Transform a function into a :term:`single-dispatch <single
Łukasz Langafdcf2b72013-06-07 22:54:03 +0200336 dispatch>` :term:`generic function`.
Łukasz Langa6f692512013-06-05 12:20:24 +0200337
338 To define a generic function, decorate it with the ``@singledispatch``
339 decorator. Note that the dispatch happens on the type of the first argument,
340 create your function accordingly::
341
342 >>> from functools import singledispatch
343 >>> @singledispatch
344 ... def fun(arg, verbose=False):
345 ... if verbose:
346 ... print("Let me just say,", end=" ")
347 ... print(arg)
348
349 To add overloaded implementations to the function, use the :func:`register`
Łukasz Langae5697532017-12-11 13:56:31 -0800350 attribute of the generic function. It is a decorator. For functions
351 annotated with types, the decorator will infer the type of the first
352 argument automatically::
Łukasz Langa6f692512013-06-05 12:20:24 +0200353
Łukasz Langae5697532017-12-11 13:56:31 -0800354 >>> @fun.register
355 ... def _(arg: int, verbose=False):
Łukasz Langa6f692512013-06-05 12:20:24 +0200356 ... if verbose:
357 ... print("Strength in numbers, eh?", end=" ")
358 ... print(arg)
359 ...
Łukasz Langae5697532017-12-11 13:56:31 -0800360 >>> @fun.register
361 ... def _(arg: list, verbose=False):
Łukasz Langa6f692512013-06-05 12:20:24 +0200362 ... if verbose:
363 ... print("Enumerate this:")
364 ... for i, elem in enumerate(arg):
365 ... print(i, elem)
366
Łukasz Langae5697532017-12-11 13:56:31 -0800367 For code which doesn't use type annotations, the appropriate type
368 argument can be passed explicitly to the decorator itself::
369
370 >>> @fun.register(complex)
371 ... def _(arg, verbose=False):
372 ... if verbose:
373 ... print("Better than complicated.", end=" ")
374 ... print(arg.real, arg.imag)
375 ...
376
377
Łukasz Langa6f692512013-06-05 12:20:24 +0200378 To enable registering lambdas and pre-existing functions, the
379 :func:`register` attribute can be used in a functional form::
380
381 >>> def nothing(arg, verbose=False):
382 ... print("Nothing.")
383 ...
384 >>> fun.register(type(None), nothing)
385
386 The :func:`register` attribute returns the undecorated function which
387 enables decorator stacking, pickling, as well as creating unit tests for
388 each variant independently::
389
390 >>> @fun.register(float)
391 ... @fun.register(Decimal)
392 ... def fun_num(arg, verbose=False):
393 ... if verbose:
394 ... print("Half of your number:", end=" ")
395 ... print(arg / 2)
396 ...
397 >>> fun_num is fun
398 False
399
400 When called, the generic function dispatches on the type of the first
401 argument::
402
403 >>> fun("Hello, world.")
404 Hello, world.
405 >>> fun("test.", verbose=True)
406 Let me just say, test.
407 >>> fun(42, verbose=True)
408 Strength in numbers, eh? 42
409 >>> fun(['spam', 'spam', 'eggs', 'spam'], verbose=True)
410 Enumerate this:
411 0 spam
412 1 spam
413 2 eggs
414 3 spam
415 >>> fun(None)
416 Nothing.
417 >>> fun(1.23)
418 0.615
419
420 Where there is no registered implementation for a specific type, its
421 method resolution order is used to find a more generic implementation.
422 The original function decorated with ``@singledispatch`` is registered
423 for the base ``object`` type, which means it is used if no better
424 implementation is found.
425
426 To check which implementation will the generic function choose for
427 a given type, use the ``dispatch()`` attribute::
428
429 >>> fun.dispatch(float)
430 <function fun_num at 0x1035a2840>
431 >>> fun.dispatch(dict) # note: default implementation
432 <function fun at 0x103fe0000>
433
434 To access all registered implementations, use the read-only ``registry``
435 attribute::
436
437 >>> fun.registry.keys()
438 dict_keys([<class 'NoneType'>, <class 'int'>, <class 'object'>,
439 <class 'decimal.Decimal'>, <class 'list'>,
440 <class 'float'>])
441 >>> fun.registry[float]
442 <function fun_num at 0x1035a2840>
443 >>> fun.registry[object]
444 <function fun at 0x103fe0000>
445
446 .. versionadded:: 3.4
447
Łukasz Langae5697532017-12-11 13:56:31 -0800448 .. versionchanged:: 3.7
449 The :func:`register` attribute supports using type annotations.
450
Łukasz Langa6f692512013-06-05 12:20:24 +0200451
Ethan Smithc6512752018-05-26 16:38:33 -0400452.. class:: singledispatchmethod(func)
453
454 Transform a method into a :term:`single-dispatch <single
455 dispatch>` :term:`generic function`.
456
457 To define a generic method, decorate it with the ``@singledispatchmethod``
458 decorator. Note that the dispatch happens on the type of the first non-self
459 or non-cls argument, create your function accordingly::
460
461 class Negator:
462 @singledispatchmethod
463 def neg(self, arg):
464 raise NotImplementedError("Cannot negate a")
465
466 @neg.register
467 def _(self, arg: int):
468 return -arg
469
470 @neg.register
471 def _(self, arg: bool):
472 return not arg
473
474 ``@singledispatchmethod`` supports nesting with other decorators such as
475 ``@classmethod``. Note that to allow for ``dispatcher.register``,
476 ``singledispatchmethod`` must be the *outer most* decorator. Here is the
477 ``Negator`` class with the ``neg`` methods being class bound::
478
479 class Negator:
480 @singledispatchmethod
481 @classmethod
482 def neg(cls, arg):
483 raise NotImplementedError("Cannot negate a")
484
485 @neg.register
486 @classmethod
487 def _(cls, arg: int):
488 return -arg
489
490 @neg.register
491 @classmethod
492 def _(cls, arg: bool):
493 return not arg
494
495 The same pattern can be used for other similar decorators: ``staticmethod``,
496 ``abstractmethod``, and others.
497
Inada Naokibc284f02019-03-27 18:15:17 +0900498 .. versionadded:: 3.8
499
500
Georg Brandl036490d2009-05-17 13:00:36 +0000501.. function:: update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Georg Brandl116aa622007-08-15 14:28:22 +0000502
503 Update a *wrapper* function to look like the *wrapped* function. The optional
504 arguments are tuples to specify which attributes of the original function are
505 assigned directly to the matching attributes on the wrapper function and which
506 attributes of the wrapper function are updated with the corresponding attributes
507 from the original function. The default values for these arguments are the
Berker Peksag472233e2016-04-18 21:20:50 +0300508 module level constants ``WRAPPER_ASSIGNMENTS`` (which assigns to the wrapper
509 function's ``__module__``, ``__name__``, ``__qualname__``, ``__annotations__``
510 and ``__doc__``, the documentation string) and ``WRAPPER_UPDATES`` (which
511 updates the wrapper function's ``__dict__``, i.e. the instance dictionary).
Georg Brandl116aa622007-08-15 14:28:22 +0000512
Nick Coghlan98876832010-08-17 06:17:18 +0000513 To allow access to the original function for introspection and other purposes
514 (e.g. bypassing a caching decorator such as :func:`lru_cache`), this function
Nick Coghlan24c05bc2013-07-15 21:13:08 +1000515 automatically adds a ``__wrapped__`` attribute to the wrapper that refers to
516 the function being wrapped.
Nick Coghlan98876832010-08-17 06:17:18 +0000517
Christian Heimesd8654cf2007-12-02 15:22:16 +0000518 The main intended use for this function is in :term:`decorator` functions which
519 wrap the decorated function and return the wrapper. If the wrapper function is
520 not updated, the metadata of the returned function will reflect the wrapper
Georg Brandl116aa622007-08-15 14:28:22 +0000521 definition rather than the original function definition, which is typically less
522 than helpful.
523
Nick Coghlan98876832010-08-17 06:17:18 +0000524 :func:`update_wrapper` may be used with callables other than functions. Any
525 attributes named in *assigned* or *updated* that are missing from the object
526 being wrapped are ignored (i.e. this function will not attempt to set them
527 on the wrapper function). :exc:`AttributeError` is still raised if the
528 wrapper function itself is missing any attributes named in *updated*.
529
530 .. versionadded:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000531 Automatic addition of the ``__wrapped__`` attribute.
Nick Coghlan98876832010-08-17 06:17:18 +0000532
533 .. versionadded:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000534 Copying of the ``__annotations__`` attribute by default.
Nick Coghlan98876832010-08-17 06:17:18 +0000535
536 .. versionchanged:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000537 Missing attributes no longer trigger an :exc:`AttributeError`.
538
Nick Coghlan24c05bc2013-07-15 21:13:08 +1000539 .. versionchanged:: 3.4
540 The ``__wrapped__`` attribute now always refers to the wrapped
541 function, even if that function defined a ``__wrapped__`` attribute.
542 (see :issue:`17482`)
543
Georg Brandl116aa622007-08-15 14:28:22 +0000544
Georg Brandl8a1caa22010-07-29 16:01:11 +0000545.. decorator:: wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Georg Brandl116aa622007-08-15 14:28:22 +0000546
Ezio Melotti67f6d5f2014-08-05 08:14:28 +0300547 This is a convenience function for invoking :func:`update_wrapper` as a
548 function decorator when defining a wrapper function. It is equivalent to
549 ``partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)``.
550 For example::
Georg Brandl116aa622007-08-15 14:28:22 +0000551
Christian Heimesfe337bf2008-03-23 21:54:12 +0000552 >>> from functools import wraps
Georg Brandl116aa622007-08-15 14:28:22 +0000553 >>> def my_decorator(f):
554 ... @wraps(f)
555 ... def wrapper(*args, **kwds):
Georg Brandl6911e3c2007-09-04 07:15:32 +0000556 ... print('Calling decorated function')
Georg Brandl116aa622007-08-15 14:28:22 +0000557 ... return f(*args, **kwds)
558 ... return wrapper
559 ...
560 >>> @my_decorator
561 ... def example():
562 ... """Docstring"""
Georg Brandl6911e3c2007-09-04 07:15:32 +0000563 ... print('Called example function')
Georg Brandl116aa622007-08-15 14:28:22 +0000564 ...
565 >>> example()
566 Calling decorated function
567 Called example function
568 >>> example.__name__
569 'example'
570 >>> example.__doc__
571 'Docstring'
572
573 Without the use of this decorator factory, the name of the example function
574 would have been ``'wrapper'``, and the docstring of the original :func:`example`
575 would have been lost.
576
577
578.. _partial-objects:
579
580:class:`partial` Objects
581------------------------
582
583:class:`partial` objects are callable objects created by :func:`partial`. They
584have three read-only attributes:
585
586
587.. attribute:: partial.func
588
589 A callable object or function. Calls to the :class:`partial` object will be
590 forwarded to :attr:`func` with new arguments and keywords.
591
592
593.. attribute:: partial.args
594
595 The leftmost positional arguments that will be prepended to the positional
596 arguments provided to a :class:`partial` object call.
597
598
599.. attribute:: partial.keywords
600
601 The keyword arguments that will be supplied when the :class:`partial` object is
602 called.
603
604:class:`partial` objects are like :class:`function` objects in that they are
605callable, weak referencable, and can have attributes. There are some important
Martin Panterbae5d812016-06-18 03:57:31 +0000606differences. For instance, the :attr:`~definition.__name__` and :attr:`__doc__` attributes
Georg Brandl116aa622007-08-15 14:28:22 +0000607are not created automatically. Also, :class:`partial` objects defined in
608classes behave like static methods and do not transform into bound methods
609during instance attribute look-up.