blob: 75c9d41b43acd0659419e4839676b6ccbff07e6f [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>
Pablo Galindo99e6c262020-01-23 15:29:52 +000011.. moduleauthor:: Pablo Galindo <pablogsal@gmail.com>
Georg Brandl116aa622007-08-15 14:28:22 +000012.. sectionauthor:: Peter Harris <scav@blueyonder.co.uk>
13
Raymond Hettinger05ce0792011-01-10 21:16:07 +000014**Source code:** :source:`Lib/functools.py`
15
Pablo Galindo99e6c262020-01-23 15:29:52 +000016.. testsetup:: default
17
18 import functools
19 from functools import *
20
Raymond Hettinger05ce0792011-01-10 21:16:07 +000021--------------
Georg Brandl116aa622007-08-15 14:28:22 +000022
Georg Brandl116aa622007-08-15 14:28:22 +000023The :mod:`functools` module is for higher-order functions: functions that act on
24or return other functions. In general, any callable object can be treated as a
25function for the purposes of this module.
26
Thomas Woutersed03b412007-08-28 21:37:11 +000027The :mod:`functools` module defines the following functions:
28
Raymond Hettinger21cdb712020-05-11 17:00:53 -070029.. decorator:: cache(user_function)
30
31 Simple lightweight unbounded function cache. Sometimes called
32 `"memoize" <https://en.wikipedia.org/wiki/Memoization>`_.
33
34 Returns the same as ``lru_cache(maxsize=None)``, creating a thin
35 wrapper around a dictionary lookup for the function arguments. Because it
36 never needs to evict old values, this is smaller and faster than
37 :func:`lru_cache()` with a size limit.
38
39 For example::
40
41 @cache
42 def factorial(n):
43 return n * factorial(n-1) if n else 1
44
45 >>> factorial(10) # no previously cached result, makes 11 recursive calls
46 3628800
47 >>> factorial(5) # just looks up cached value result
48 120
49 >>> factorial(12) # makes two new recursive calls, the other 10 are cached
50 479001600
51
52 .. versionadded:: 3.9
53
54
Carl Meyerd658dea2018-08-28 01:11:56 -060055.. decorator:: cached_property(func)
56
57 Transform a method of a class into a property whose value is computed once
58 and then cached as a normal attribute for the life of the instance. Similar
59 to :func:`property`, with the addition of caching. Useful for expensive
60 computed properties of instances that are otherwise effectively immutable.
61
62 Example::
63
64 class DataSet:
65 def __init__(self, sequence_of_numbers):
66 self._data = sequence_of_numbers
67
68 @cached_property
69 def stdev(self):
70 return statistics.stdev(self._data)
71
72 @cached_property
73 def variance(self):
74 return statistics.variance(self._data)
75
Raymond Hettinger48be6b12020-10-24 18:17:17 -070076 Note, this decorator interferes with the operation of :pep:`412`
77 key-sharing dictionaries. This means that instance dictionaries
78 can take more space than usual.
79
80 Also, this decorator requires that the ``__dict__`` attribute on each instance
81 be a mutable mapping. This means it will not work with some types, such as
82 metaclasses (since the ``__dict__`` attributes on type instances are
83 read-only proxies for the class namespace), and those that specify
84 ``__slots__`` without including ``__dict__`` as one of the defined slots
85 (as such classes don't provide a ``__dict__`` attribute at all).
86
87 If a mutable mapping is not available or if space-efficient key sharing
88 is desired, an effect similar to :func:`cached_property` can be achieved
89 by a stacking :func:`property` on top of :func:`cache`::
90
91 class DataSet:
92 def __init__(self, sequence_of_numbers):
93 self._data = sequence_of_numbers
94
95 @property
96 @cache
97 def stdev(self):
98 return statistics.stdev(self._data)
99
Carl Meyerd658dea2018-08-28 01:11:56 -0600100 .. versionadded:: 3.8
101
Carl Meyerd658dea2018-08-28 01:11:56 -0600102
Éric Araujob10089e2010-11-18 14:22:08 +0000103.. function:: cmp_to_key(func)
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000104
Raymond Hettinger86e9b6b2014-11-09 17:20:56 -0800105 Transform an old-style comparison function to a :term:`key function`. Used
106 with tools that accept key functions (such as :func:`sorted`, :func:`min`,
Benjamin Petersoncca65312010-08-09 02:13:10 +0000107 :func:`max`, :func:`heapq.nlargest`, :func:`heapq.nsmallest`,
108 :func:`itertools.groupby`). This function is primarily used as a transition
Ezio Melotti9ecb6be2012-01-16 08:28:54 +0200109 tool for programs being converted from Python 2 which supported the use of
Benjamin Petersoncca65312010-08-09 02:13:10 +0000110 comparison functions.
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000111
Georg Brandl6c89a792012-01-25 22:36:25 +0100112 A comparison function is any callable that accept two arguments, compares them,
Benjamin Petersoncca65312010-08-09 02:13:10 +0000113 and returns a negative number for less-than, zero for equality, or a positive
114 number for greater-than. A key function is a callable that accepts one
Raymond Hettinger86e9b6b2014-11-09 17:20:56 -0800115 argument and returns another value to be used as the sort key.
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000116
Benjamin Petersoncca65312010-08-09 02:13:10 +0000117 Example::
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000118
Benjamin Petersoncca65312010-08-09 02:13:10 +0000119 sorted(iterable, key=cmp_to_key(locale.strcoll)) # locale-aware sort order
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000120
Raymond Hettinger86e9b6b2014-11-09 17:20:56 -0800121 For sorting examples and a brief sorting tutorial, see :ref:`sortinghowto`.
122
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000123 .. versionadded:: 3.2
124
Georg Brandl67b21b72010-08-17 15:07:14 +0000125
Raymond Hettingerb8218682019-05-26 11:27:35 -0700126.. decorator:: lru_cache(user_function)
127 lru_cache(maxsize=128, typed=False)
Georg Brandl2e7346a2010-07-31 18:09:23 +0000128
129 Decorator to wrap a function with a memoizing callable that saves up to the
130 *maxsize* most recent calls. It can save time when an expensive or I/O bound
131 function is periodically called with the same arguments.
132
Raymond Hettinger7496b412010-11-30 19:15:45 +0000133 Since a dictionary is used to cache results, the positional and keyword
134 arguments to the function must be hashable.
Georg Brandl2e7346a2010-07-31 18:09:23 +0000135
Raymond Hettinger902bcd92018-09-14 00:53:20 -0700136 Distinct argument patterns may be considered to be distinct calls with
137 separate cache entries. For example, `f(a=1, b=2)` and `f(b=2, a=1)`
138 differ in their keyword argument order and may have two separate cache
139 entries.
140
Raymond Hettingerb8218682019-05-26 11:27:35 -0700141 If *user_function* is specified, it must be a callable. This allows the
142 *lru_cache* decorator to be applied directly to a user function, leaving
143 the *maxsize* at its default value of 128::
144
145 @lru_cache
146 def count_vowels(sentence):
147 sentence = sentence.casefold()
148 return sum(sentence.count(vowel) for vowel in 'aeiou')
149
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300150 If *maxsize* is set to ``None``, the LRU feature is disabled and the cache can
Raymond Hettingerad9eaea2020-05-03 16:45:13 -0700151 grow without bound.
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000152
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300153 If *typed* is set to true, function arguments of different types will be
Raymond Hettingercd9fdfd2011-10-20 08:57:45 -0700154 cached separately. For example, ``f(3)`` and ``f(3.0)`` will be treated
155 as distinct calls with distinct results.
156
Manjusaka051ff522019-11-12 15:30:18 +0800157 The wrapped function is instrumented with a :func:`cache_parameters`
158 function that returns a new :class:`dict` showing the values for *maxsize*
159 and *typed*. This is for information purposes only. Mutating the values
160 has no effect.
161
Raymond Hettinger7496b412010-11-30 19:15:45 +0000162 To help measure the effectiveness of the cache and tune the *maxsize*
163 parameter, the wrapped function is instrumented with a :func:`cache_info`
164 function that returns a :term:`named tuple` showing *hits*, *misses*,
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000165 *maxsize* and *currsize*. In a multi-threaded environment, the hits
166 and misses are approximate.
Nick Coghlan234515a2010-11-30 06:19:46 +0000167
Raymond Hettinger7496b412010-11-30 19:15:45 +0000168 The decorator also provides a :func:`cache_clear` function for clearing or
169 invalidating the cache.
Georg Brandl2e7346a2010-07-31 18:09:23 +0000170
Raymond Hettinger3fccfcb2010-08-17 19:19:29 +0000171 The original underlying function is accessible through the
Raymond Hettinger7496b412010-11-30 19:15:45 +0000172 :attr:`__wrapped__` attribute. This is useful for introspection, for
173 bypassing the cache, or for rewrapping the function with a different cache.
Nick Coghlan98876832010-08-17 06:17:18 +0000174
Raymond Hettingercc038582010-11-30 20:02:57 +0000175 An `LRU (least recently used) cache
Allen Guo3d542112020-05-12 18:54:18 -0400176 <https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_recently_used_(LRU)>`_
177 works best when the most recent calls are the best predictors of upcoming
178 calls (for example, the most popular articles on a news server tend to
179 change each day). The cache's size limit assures that the cache does not
180 grow without bound on long-running processes such as web servers.
Raymond Hettinger7496b412010-11-30 19:15:45 +0000181
Raymond Hettingerf0e0f202018-11-25 16:24:52 -0800182 In general, the LRU cache should only be used when you want to reuse
183 previously computed values. Accordingly, it doesn't make sense to cache
184 functions with side-effects, functions that need to create distinct mutable
185 objects on each call, or impure functions such as time() or random().
186
Raymond Hettingercc038582010-11-30 20:02:57 +0000187 Example of an LRU cache for static web content::
Raymond Hettinger7496b412010-11-30 19:15:45 +0000188
Raymond Hettinger17328e42013-04-06 20:27:33 -0700189 @lru_cache(maxsize=32)
Raymond Hettinger7496b412010-11-30 19:15:45 +0000190 def get_pep(num):
191 'Retrieve text of a Python Enhancement Proposal'
192 resource = 'http://www.python.org/dev/peps/pep-%04d/' % num
193 try:
194 with urllib.request.urlopen(resource) as s:
195 return s.read()
196 except urllib.error.HTTPError:
197 return 'Not Found'
198
199 >>> for n in 8, 290, 308, 320, 8, 218, 320, 279, 289, 320, 9991:
200 ... pep = get_pep(n)
201 ... print(n, len(pep))
202
Raymond Hettinger17328e42013-04-06 20:27:33 -0700203 >>> get_pep.cache_info()
204 CacheInfo(hits=3, misses=8, maxsize=32, currsize=8)
Georg Brandl2e7346a2010-07-31 18:09:23 +0000205
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000206 Example of efficiently computing
Georg Brandl5d941342016-02-26 19:37:12 +0100207 `Fibonacci numbers <https://en.wikipedia.org/wiki/Fibonacci_number>`_
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000208 using a cache to implement a
Georg Brandl5d941342016-02-26 19:37:12 +0100209 `dynamic programming <https://en.wikipedia.org/wiki/Dynamic_programming>`_
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000210 technique::
211
212 @lru_cache(maxsize=None)
213 def fib(n):
214 if n < 2:
215 return n
216 return fib(n-1) + fib(n-2)
217
Raymond Hettinger17328e42013-04-06 20:27:33 -0700218 >>> [fib(n) for n in range(16)]
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000219 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
220
Raymond Hettinger17328e42013-04-06 20:27:33 -0700221 >>> fib.cache_info()
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000222 CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)
223
Georg Brandl2e7346a2010-07-31 18:09:23 +0000224 .. versionadded:: 3.2
225
Raymond Hettingercd9fdfd2011-10-20 08:57:45 -0700226 .. versionchanged:: 3.3
227 Added the *typed* option.
228
Raymond Hettingerb8218682019-05-26 11:27:35 -0700229 .. versionchanged:: 3.8
230 Added the *user_function* option.
231
Manjusaka051ff522019-11-12 15:30:18 +0800232 .. versionadded:: 3.9
233 Added the function :func:`cache_parameters`
234
Georg Brandl8a1caa22010-07-29 16:01:11 +0000235.. decorator:: total_ordering
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000236
237 Given a class defining one or more rich comparison ordering methods, this
Benjamin Peterson08bf91c2010-04-11 16:12:57 +0000238 class decorator supplies the rest. This simplifies the effort involved
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000239 in specifying all of the possible rich comparison operations:
240
241 The class must define one of :meth:`__lt__`, :meth:`__le__`,
242 :meth:`__gt__`, or :meth:`__ge__`.
243 In addition, the class should supply an :meth:`__eq__` method.
244
245 For example::
246
247 @total_ordering
248 class Student:
Nick Coghlanf05d9812013-10-02 00:02:03 +1000249 def _is_valid_operand(self, other):
250 return (hasattr(other, "lastname") and
251 hasattr(other, "firstname"))
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000252 def __eq__(self, other):
Nick Coghlanf05d9812013-10-02 00:02:03 +1000253 if not self._is_valid_operand(other):
254 return NotImplemented
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000255 return ((self.lastname.lower(), self.firstname.lower()) ==
256 (other.lastname.lower(), other.firstname.lower()))
257 def __lt__(self, other):
Nick Coghlanf05d9812013-10-02 00:02:03 +1000258 if not self._is_valid_operand(other):
259 return NotImplemented
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000260 return ((self.lastname.lower(), self.firstname.lower()) <
261 (other.lastname.lower(), other.firstname.lower()))
262
Nick Coghlanf05d9812013-10-02 00:02:03 +1000263 .. note::
264
265 While this decorator makes it easy to create well behaved totally
266 ordered types, it *does* come at the cost of slower execution and
267 more complex stack traces for the derived comparison methods. If
268 performance benchmarking indicates this is a bottleneck for a given
269 application, implementing all six rich comparison methods instead is
270 likely to provide an easy speed boost.
271
Ben Avrahamibef7d292020-10-06 20:40:50 +0300272 .. note::
273
274 This decorator makes no attempt to override methods that have been
275 declared in the class *or its superclasses*. Meaning that if a
276 superclass defines a comparison operator, *total_ordering* will not
277 implement it again, even if the original method is abstract.
278
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000279 .. versionadded:: 3.2
280
Nick Coghlanf05d9812013-10-02 00:02:03 +1000281 .. versionchanged:: 3.4
282 Returning NotImplemented from the underlying comparison function for
283 unrecognised types is now supported.
Georg Brandl67b21b72010-08-17 15:07:14 +0000284
Serhiy Storchaka2085bd02019-06-01 11:00:15 +0300285.. function:: partial(func, /, *args, **keywords)
Georg Brandl116aa622007-08-15 14:28:22 +0000286
Andrei Petre83a07652018-10-22 23:11:20 -0700287 Return a new :ref:`partial object<partial-objects>` which when called
288 will behave like *func* called with the positional arguments *args*
289 and keyword arguments *keywords*. If more arguments are supplied to the
290 call, they are appended to *args*. If additional keyword arguments are
291 supplied, they extend and override *keywords*.
Georg Brandl116aa622007-08-15 14:28:22 +0000292 Roughly equivalent to::
293
Serhiy Storchaka2085bd02019-06-01 11:00:15 +0300294 def partial(func, /, *args, **keywords):
Georg Brandl116aa622007-08-15 14:28:22 +0000295 def newfunc(*fargs, **fkeywords):
Sergey Fedoseevb981fec2018-10-20 02:42:07 +0500296 newkeywords = {**keywords, **fkeywords}
Martin Panter0c0da482016-06-12 01:46:50 +0000297 return func(*args, *fargs, **newkeywords)
Georg Brandl116aa622007-08-15 14:28:22 +0000298 newfunc.func = func
299 newfunc.args = args
300 newfunc.keywords = keywords
301 return newfunc
302
303 The :func:`partial` is used for partial function application which "freezes"
304 some portion of a function's arguments and/or keywords resulting in a new object
305 with a simplified signature. For example, :func:`partial` can be used to create
306 a callable that behaves like the :func:`int` function where the *base* argument
Christian Heimesfe337bf2008-03-23 21:54:12 +0000307 defaults to two:
Georg Brandl116aa622007-08-15 14:28:22 +0000308
Christian Heimesfe337bf2008-03-23 21:54:12 +0000309 >>> from functools import partial
Georg Brandl116aa622007-08-15 14:28:22 +0000310 >>> basetwo = partial(int, base=2)
311 >>> basetwo.__doc__ = 'Convert base 2 string to an int.'
312 >>> basetwo('10010')
313 18
314
315
Serhiy Storchaka70c5f2a2019-06-01 11:38:24 +0300316.. class:: partialmethod(func, /, *args, **keywords)
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000317
318 Return a new :class:`partialmethod` descriptor which behaves
319 like :class:`partial` except that it is designed to be used as a method
320 definition rather than being directly callable.
321
322 *func* must be a :term:`descriptor` or a callable (objects which are both,
323 like normal functions, are handled as descriptors).
324
325 When *func* is a descriptor (such as a normal Python function,
326 :func:`classmethod`, :func:`staticmethod`, :func:`abstractmethod` or
327 another instance of :class:`partialmethod`), calls to ``__get__`` are
328 delegated to the underlying descriptor, and an appropriate
Andrei Petre83a07652018-10-22 23:11:20 -0700329 :ref:`partial object<partial-objects>` returned as the result.
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000330
331 When *func* is a non-descriptor callable, an appropriate bound method is
332 created dynamically. This behaves like a normal Python function when
333 used as a method: the *self* argument will be inserted as the first
334 positional argument, even before the *args* and *keywords* supplied to
335 the :class:`partialmethod` constructor.
336
337 Example::
338
Serhiy Storchakae042a452019-06-10 13:35:52 +0300339 >>> class Cell:
Benjamin Peterson3a434032014-03-30 15:07:09 -0400340 ... def __init__(self):
341 ... self._alive = False
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000342 ... @property
343 ... def alive(self):
344 ... return self._alive
345 ... def set_state(self, state):
346 ... self._alive = bool(state)
Nick Coghlan3daaf5f2013-11-04 23:32:16 +1000347 ... set_alive = partialmethod(set_state, True)
348 ... set_dead = partialmethod(set_state, False)
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000349 ...
350 >>> c = Cell()
351 >>> c.alive
352 False
353 >>> c.set_alive()
354 >>> c.alive
355 True
356
357 .. versionadded:: 3.4
358
359
Georg Brandl58f9e4f2008-04-19 22:18:33 +0000360.. function:: reduce(function, iterable[, initializer])
Georg Brandl116aa622007-08-15 14:28:22 +0000361
Brendan Jurd9df10022018-10-01 16:52:10 +1000362 Apply *function* of two arguments cumulatively to the items of *iterable*, from
363 left to right, so as to reduce the iterable to a single value. For example,
Georg Brandl116aa622007-08-15 14:28:22 +0000364 ``reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])`` calculates ``((((1+2)+3)+4)+5)``.
365 The left argument, *x*, is the accumulated value and the right argument, *y*, is
Brendan Jurd9df10022018-10-01 16:52:10 +1000366 the update value from the *iterable*. If the optional *initializer* is present,
367 it is placed before the items of the iterable in the calculation, and serves as
368 a default when the iterable is empty. If *initializer* is not given and
369 *iterable* contains only one item, the first item is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000370
Raymond Hettinger558dcf32014-12-16 18:16:57 -0800371 Roughly equivalent to::
Raymond Hettinger64801682013-10-12 16:04:17 -0700372
373 def reduce(function, iterable, initializer=None):
374 it = iter(iterable)
375 if initializer is None:
376 value = next(it)
377 else:
378 value = initializer
379 for element in it:
380 value = function(value, element)
381 return value
382
Gerrit Hollbd81cbd2018-07-04 23:26:32 +0100383 See :func:`itertools.accumulate` for an iterator that yields all intermediate
384 values.
Georg Brandl116aa622007-08-15 14:28:22 +0000385
Daisuke Miyakawa0e61e672017-10-12 23:39:43 +0900386.. decorator:: singledispatch
Łukasz Langa6f692512013-06-05 12:20:24 +0200387
Daisuke Miyakawa0e61e672017-10-12 23:39:43 +0900388 Transform a function into a :term:`single-dispatch <single
Łukasz Langafdcf2b72013-06-07 22:54:03 +0200389 dispatch>` :term:`generic function`.
Łukasz Langa6f692512013-06-05 12:20:24 +0200390
391 To define a generic function, decorate it with the ``@singledispatch``
392 decorator. Note that the dispatch happens on the type of the first argument,
393 create your function accordingly::
394
395 >>> from functools import singledispatch
396 >>> @singledispatch
397 ... def fun(arg, verbose=False):
398 ... if verbose:
399 ... print("Let me just say,", end=" ")
400 ... print(arg)
401
402 To add overloaded implementations to the function, use the :func:`register`
Łukasz Langae5697532017-12-11 13:56:31 -0800403 attribute of the generic function. It is a decorator. For functions
404 annotated with types, the decorator will infer the type of the first
405 argument automatically::
Łukasz Langa6f692512013-06-05 12:20:24 +0200406
Łukasz Langae5697532017-12-11 13:56:31 -0800407 >>> @fun.register
408 ... def _(arg: int, verbose=False):
Łukasz Langa6f692512013-06-05 12:20:24 +0200409 ... if verbose:
410 ... print("Strength in numbers, eh?", end=" ")
411 ... print(arg)
412 ...
Łukasz Langae5697532017-12-11 13:56:31 -0800413 >>> @fun.register
414 ... def _(arg: list, verbose=False):
Łukasz Langa6f692512013-06-05 12:20:24 +0200415 ... if verbose:
416 ... print("Enumerate this:")
417 ... for i, elem in enumerate(arg):
418 ... print(i, elem)
419
Łukasz Langae5697532017-12-11 13:56:31 -0800420 For code which doesn't use type annotations, the appropriate type
421 argument can be passed explicitly to the decorator itself::
422
423 >>> @fun.register(complex)
424 ... def _(arg, verbose=False):
425 ... if verbose:
426 ... print("Better than complicated.", end=" ")
427 ... print(arg.real, arg.imag)
428 ...
429
430
Łukasz Langa6f692512013-06-05 12:20:24 +0200431 To enable registering lambdas and pre-existing functions, the
432 :func:`register` attribute can be used in a functional form::
433
434 >>> def nothing(arg, verbose=False):
435 ... print("Nothing.")
436 ...
437 >>> fun.register(type(None), nothing)
438
439 The :func:`register` attribute returns the undecorated function which
440 enables decorator stacking, pickling, as well as creating unit tests for
441 each variant independently::
442
443 >>> @fun.register(float)
444 ... @fun.register(Decimal)
445 ... def fun_num(arg, verbose=False):
446 ... if verbose:
447 ... print("Half of your number:", end=" ")
448 ... print(arg / 2)
449 ...
450 >>> fun_num is fun
451 False
452
453 When called, the generic function dispatches on the type of the first
454 argument::
455
456 >>> fun("Hello, world.")
457 Hello, world.
458 >>> fun("test.", verbose=True)
459 Let me just say, test.
460 >>> fun(42, verbose=True)
461 Strength in numbers, eh? 42
462 >>> fun(['spam', 'spam', 'eggs', 'spam'], verbose=True)
463 Enumerate this:
464 0 spam
465 1 spam
466 2 eggs
467 3 spam
468 >>> fun(None)
469 Nothing.
470 >>> fun(1.23)
471 0.615
472
473 Where there is no registered implementation for a specific type, its
474 method resolution order is used to find a more generic implementation.
475 The original function decorated with ``@singledispatch`` is registered
476 for the base ``object`` type, which means it is used if no better
477 implementation is found.
478
Batuhan Taşkaya24555ce2019-11-19 11:16:46 +0300479 If an implementation registered to :term:`abstract base class`, virtual
480 subclasses will be dispatched to that implementation::
481
482 >>> from collections.abc import Mapping
483 >>> @fun.register
484 ... def _(arg: Mapping, verbose=False):
485 ... if verbose:
486 ... print("Keys & Values")
487 ... for key, value in arg.items():
488 ... print(key, "=>", value)
489 ...
490 >>> fun({"a": "b"})
491 a => b
492
Łukasz Langa6f692512013-06-05 12:20:24 +0200493 To check which implementation will the generic function choose for
494 a given type, use the ``dispatch()`` attribute::
495
496 >>> fun.dispatch(float)
497 <function fun_num at 0x1035a2840>
498 >>> fun.dispatch(dict) # note: default implementation
499 <function fun at 0x103fe0000>
500
501 To access all registered implementations, use the read-only ``registry``
502 attribute::
503
504 >>> fun.registry.keys()
505 dict_keys([<class 'NoneType'>, <class 'int'>, <class 'object'>,
506 <class 'decimal.Decimal'>, <class 'list'>,
507 <class 'float'>])
508 >>> fun.registry[float]
509 <function fun_num at 0x1035a2840>
510 >>> fun.registry[object]
511 <function fun at 0x103fe0000>
512
513 .. versionadded:: 3.4
514
Łukasz Langae5697532017-12-11 13:56:31 -0800515 .. versionchanged:: 3.7
516 The :func:`register` attribute supports using type annotations.
517
Łukasz Langa6f692512013-06-05 12:20:24 +0200518
Ethan Smithc6512752018-05-26 16:38:33 -0400519.. class:: singledispatchmethod(func)
520
521 Transform a method into a :term:`single-dispatch <single
522 dispatch>` :term:`generic function`.
523
524 To define a generic method, decorate it with the ``@singledispatchmethod``
525 decorator. Note that the dispatch happens on the type of the first non-self
526 or non-cls argument, create your function accordingly::
527
528 class Negator:
529 @singledispatchmethod
530 def neg(self, arg):
531 raise NotImplementedError("Cannot negate a")
532
533 @neg.register
534 def _(self, arg: int):
535 return -arg
536
537 @neg.register
538 def _(self, arg: bool):
539 return not arg
540
541 ``@singledispatchmethod`` supports nesting with other decorators such as
542 ``@classmethod``. Note that to allow for ``dispatcher.register``,
543 ``singledispatchmethod`` must be the *outer most* decorator. Here is the
544 ``Negator`` class with the ``neg`` methods being class bound::
545
546 class Negator:
547 @singledispatchmethod
548 @classmethod
549 def neg(cls, arg):
550 raise NotImplementedError("Cannot negate a")
551
552 @neg.register
553 @classmethod
554 def _(cls, arg: int):
555 return -arg
556
557 @neg.register
558 @classmethod
559 def _(cls, arg: bool):
560 return not arg
561
562 The same pattern can be used for other similar decorators: ``staticmethod``,
563 ``abstractmethod``, and others.
564
Inada Naokibc284f02019-03-27 18:15:17 +0900565 .. versionadded:: 3.8
566
567
Georg Brandl036490d2009-05-17 13:00:36 +0000568.. function:: update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Georg Brandl116aa622007-08-15 14:28:22 +0000569
570 Update a *wrapper* function to look like the *wrapped* function. The optional
571 arguments are tuples to specify which attributes of the original function are
572 assigned directly to the matching attributes on the wrapper function and which
573 attributes of the wrapper function are updated with the corresponding attributes
574 from the original function. The default values for these arguments are the
Berker Peksag472233e2016-04-18 21:20:50 +0300575 module level constants ``WRAPPER_ASSIGNMENTS`` (which assigns to the wrapper
576 function's ``__module__``, ``__name__``, ``__qualname__``, ``__annotations__``
577 and ``__doc__``, the documentation string) and ``WRAPPER_UPDATES`` (which
578 updates the wrapper function's ``__dict__``, i.e. the instance dictionary).
Georg Brandl116aa622007-08-15 14:28:22 +0000579
Nick Coghlan98876832010-08-17 06:17:18 +0000580 To allow access to the original function for introspection and other purposes
581 (e.g. bypassing a caching decorator such as :func:`lru_cache`), this function
Nick Coghlan24c05bc2013-07-15 21:13:08 +1000582 automatically adds a ``__wrapped__`` attribute to the wrapper that refers to
583 the function being wrapped.
Nick Coghlan98876832010-08-17 06:17:18 +0000584
Christian Heimesd8654cf2007-12-02 15:22:16 +0000585 The main intended use for this function is in :term:`decorator` functions which
586 wrap the decorated function and return the wrapper. If the wrapper function is
587 not updated, the metadata of the returned function will reflect the wrapper
Georg Brandl116aa622007-08-15 14:28:22 +0000588 definition rather than the original function definition, which is typically less
589 than helpful.
590
Nick Coghlan98876832010-08-17 06:17:18 +0000591 :func:`update_wrapper` may be used with callables other than functions. Any
592 attributes named in *assigned* or *updated* that are missing from the object
593 being wrapped are ignored (i.e. this function will not attempt to set them
594 on the wrapper function). :exc:`AttributeError` is still raised if the
595 wrapper function itself is missing any attributes named in *updated*.
596
597 .. versionadded:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000598 Automatic addition of the ``__wrapped__`` attribute.
Nick Coghlan98876832010-08-17 06:17:18 +0000599
600 .. versionadded:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000601 Copying of the ``__annotations__`` attribute by default.
Nick Coghlan98876832010-08-17 06:17:18 +0000602
603 .. versionchanged:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000604 Missing attributes no longer trigger an :exc:`AttributeError`.
605
Nick Coghlan24c05bc2013-07-15 21:13:08 +1000606 .. versionchanged:: 3.4
607 The ``__wrapped__`` attribute now always refers to the wrapped
608 function, even if that function defined a ``__wrapped__`` attribute.
609 (see :issue:`17482`)
610
Georg Brandl116aa622007-08-15 14:28:22 +0000611
Georg Brandl8a1caa22010-07-29 16:01:11 +0000612.. decorator:: wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Georg Brandl116aa622007-08-15 14:28:22 +0000613
Ezio Melotti67f6d5f2014-08-05 08:14:28 +0300614 This is a convenience function for invoking :func:`update_wrapper` as a
615 function decorator when defining a wrapper function. It is equivalent to
616 ``partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)``.
617 For example::
Georg Brandl116aa622007-08-15 14:28:22 +0000618
Christian Heimesfe337bf2008-03-23 21:54:12 +0000619 >>> from functools import wraps
Georg Brandl116aa622007-08-15 14:28:22 +0000620 >>> def my_decorator(f):
621 ... @wraps(f)
622 ... def wrapper(*args, **kwds):
Georg Brandl6911e3c2007-09-04 07:15:32 +0000623 ... print('Calling decorated function')
Georg Brandl116aa622007-08-15 14:28:22 +0000624 ... return f(*args, **kwds)
625 ... return wrapper
626 ...
627 >>> @my_decorator
628 ... def example():
629 ... """Docstring"""
Georg Brandl6911e3c2007-09-04 07:15:32 +0000630 ... print('Called example function')
Georg Brandl116aa622007-08-15 14:28:22 +0000631 ...
632 >>> example()
633 Calling decorated function
634 Called example function
635 >>> example.__name__
636 'example'
637 >>> example.__doc__
638 'Docstring'
639
640 Without the use of this decorator factory, the name of the example function
641 would have been ``'wrapper'``, and the docstring of the original :func:`example`
642 would have been lost.
643
644
645.. _partial-objects:
646
647:class:`partial` Objects
648------------------------
649
650:class:`partial` objects are callable objects created by :func:`partial`. They
651have three read-only attributes:
652
653
654.. attribute:: partial.func
655
656 A callable object or function. Calls to the :class:`partial` object will be
657 forwarded to :attr:`func` with new arguments and keywords.
658
659
660.. attribute:: partial.args
661
662 The leftmost positional arguments that will be prepended to the positional
663 arguments provided to a :class:`partial` object call.
664
665
666.. attribute:: partial.keywords
667
668 The keyword arguments that will be supplied when the :class:`partial` object is
669 called.
670
671:class:`partial` objects are like :class:`function` objects in that they are
672callable, weak referencable, and can have attributes. There are some important
Martin Panterbae5d812016-06-18 03:57:31 +0000673differences. For instance, the :attr:`~definition.__name__` and :attr:`__doc__` attributes
Georg Brandl116aa622007-08-15 14:28:22 +0000674are not created automatically. Also, :class:`partial` objects defined in
675classes behave like static methods and do not transform into bound methods
Raymond Hettinger48be6b12020-10-24 18:17:17 -0700676during instance attribute look-up.