blob: 871c94afaf99ecbfc848e7782acf9f51ba4a3c89 [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:
Raymond Hettingerc8a7b8f2020-12-31 17:05:58 -080065
Carl Meyerd658dea2018-08-28 01:11:56 -060066 def __init__(self, sequence_of_numbers):
Raymond Hettingerc8a7b8f2020-12-31 17:05:58 -080067 self._data = tuple(sequence_of_numbers)
Carl Meyerd658dea2018-08-28 01:11:56 -060068
69 @cached_property
70 def stdev(self):
71 return statistics.stdev(self._data)
72
Raymond Hettingerc8a7b8f2020-12-31 17:05:58 -080073 The mechanics of :func:`cached_property` are somewhat different from
74 :func:`property`. A regular property blocks attribute writes unless a
75 setter is defined. In contrast, a *cached_property* allows writes.
76
77 The *cached_property* decorator only runs on lookups and only when an
78 attribute of the same name doesn't exist. When it does run, the
79 *cached_property* writes to the attribute with the same name. Subsequent
80 attribute reads and writes take precedence over the *cached_property*
81 method and it works like a normal attribute.
82
83 The cached value can be cleared by deleting the attribute. This
84 allows the *cached_property* method to run again.
Carl Meyerd658dea2018-08-28 01:11:56 -060085
Raymond Hettinger48be6b12020-10-24 18:17:17 -070086 Note, this decorator interferes with the operation of :pep:`412`
87 key-sharing dictionaries. This means that instance dictionaries
88 can take more space than usual.
89
90 Also, this decorator requires that the ``__dict__`` attribute on each instance
91 be a mutable mapping. This means it will not work with some types, such as
92 metaclasses (since the ``__dict__`` attributes on type instances are
93 read-only proxies for the class namespace), and those that specify
94 ``__slots__`` without including ``__dict__`` as one of the defined slots
95 (as such classes don't provide a ``__dict__`` attribute at all).
96
97 If a mutable mapping is not available or if space-efficient key sharing
98 is desired, an effect similar to :func:`cached_property` can be achieved
99 by a stacking :func:`property` on top of :func:`cache`::
100
101 class DataSet:
102 def __init__(self, sequence_of_numbers):
103 self._data = sequence_of_numbers
104
105 @property
106 @cache
107 def stdev(self):
108 return statistics.stdev(self._data)
109
Carl Meyerd658dea2018-08-28 01:11:56 -0600110 .. versionadded:: 3.8
111
Carl Meyerd658dea2018-08-28 01:11:56 -0600112
Éric Araujob10089e2010-11-18 14:22:08 +0000113.. function:: cmp_to_key(func)
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000114
Raymond Hettinger86e9b6b2014-11-09 17:20:56 -0800115 Transform an old-style comparison function to a :term:`key function`. Used
116 with tools that accept key functions (such as :func:`sorted`, :func:`min`,
Benjamin Petersoncca65312010-08-09 02:13:10 +0000117 :func:`max`, :func:`heapq.nlargest`, :func:`heapq.nsmallest`,
118 :func:`itertools.groupby`). This function is primarily used as a transition
Ezio Melotti9ecb6be2012-01-16 08:28:54 +0200119 tool for programs being converted from Python 2 which supported the use of
Benjamin Petersoncca65312010-08-09 02:13:10 +0000120 comparison functions.
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000121
Georg Brandl6c89a792012-01-25 22:36:25 +0100122 A comparison function is any callable that accept two arguments, compares them,
Benjamin Petersoncca65312010-08-09 02:13:10 +0000123 and returns a negative number for less-than, zero for equality, or a positive
124 number for greater-than. A key function is a callable that accepts one
Raymond Hettinger86e9b6b2014-11-09 17:20:56 -0800125 argument and returns another value to be used as the sort key.
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000126
Benjamin Petersoncca65312010-08-09 02:13:10 +0000127 Example::
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000128
Benjamin Petersoncca65312010-08-09 02:13:10 +0000129 sorted(iterable, key=cmp_to_key(locale.strcoll)) # locale-aware sort order
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000130
Raymond Hettinger86e9b6b2014-11-09 17:20:56 -0800131 For sorting examples and a brief sorting tutorial, see :ref:`sortinghowto`.
132
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000133 .. versionadded:: 3.2
134
Georg Brandl67b21b72010-08-17 15:07:14 +0000135
Raymond Hettingerb8218682019-05-26 11:27:35 -0700136.. decorator:: lru_cache(user_function)
137 lru_cache(maxsize=128, typed=False)
Georg Brandl2e7346a2010-07-31 18:09:23 +0000138
139 Decorator to wrap a function with a memoizing callable that saves up to the
140 *maxsize* most recent calls. It can save time when an expensive or I/O bound
141 function is periodically called with the same arguments.
142
Raymond Hettinger7496b412010-11-30 19:15:45 +0000143 Since a dictionary is used to cache results, the positional and keyword
144 arguments to the function must be hashable.
Georg Brandl2e7346a2010-07-31 18:09:23 +0000145
Raymond Hettinger902bcd92018-09-14 00:53:20 -0700146 Distinct argument patterns may be considered to be distinct calls with
147 separate cache entries. For example, `f(a=1, b=2)` and `f(b=2, a=1)`
148 differ in their keyword argument order and may have two separate cache
149 entries.
150
Raymond Hettingerb8218682019-05-26 11:27:35 -0700151 If *user_function* is specified, it must be a callable. This allows the
152 *lru_cache* decorator to be applied directly to a user function, leaving
153 the *maxsize* at its default value of 128::
154
155 @lru_cache
156 def count_vowels(sentence):
Miss Islington (bot)809c3fa2021-06-14 06:43:48 -0700157 return sum(sentence.count(vowel) for vowel in 'AEIOUaeiou')
Raymond Hettingerb8218682019-05-26 11:27:35 -0700158
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300159 If *maxsize* is set to ``None``, the LRU feature is disabled and the cache can
Raymond Hettingerad9eaea2020-05-03 16:45:13 -0700160 grow without bound.
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000161
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300162 If *typed* is set to true, function arguments of different types will be
Miss Islington (bot)809c3fa2021-06-14 06:43:48 -0700163 cached separately. For example, ``f(3)`` and ``f(3.0)`` will always be
164 treated as distinct calls with distinct results. If *typed* is false,
165 the implementation will usually but not always regard them as equivalent
166 calls and only cache a single result.
Raymond Hettingercd9fdfd2011-10-20 08:57:45 -0700167
Manjusaka051ff522019-11-12 15:30:18 +0800168 The wrapped function is instrumented with a :func:`cache_parameters`
169 function that returns a new :class:`dict` showing the values for *maxsize*
170 and *typed*. This is for information purposes only. Mutating the values
171 has no effect.
172
Raymond Hettinger7496b412010-11-30 19:15:45 +0000173 To help measure the effectiveness of the cache and tune the *maxsize*
174 parameter, the wrapped function is instrumented with a :func:`cache_info`
175 function that returns a :term:`named tuple` showing *hits*, *misses*,
Miss Islington (bot)809c3fa2021-06-14 06:43:48 -0700176 *maxsize* and *currsize*.
Nick Coghlan234515a2010-11-30 06:19:46 +0000177
Raymond Hettinger7496b412010-11-30 19:15:45 +0000178 The decorator also provides a :func:`cache_clear` function for clearing or
179 invalidating the cache.
Georg Brandl2e7346a2010-07-31 18:09:23 +0000180
Raymond Hettinger3fccfcb2010-08-17 19:19:29 +0000181 The original underlying function is accessible through the
Raymond Hettinger7496b412010-11-30 19:15:45 +0000182 :attr:`__wrapped__` attribute. This is useful for introspection, for
183 bypassing the cache, or for rewrapping the function with a different cache.
Nick Coghlan98876832010-08-17 06:17:18 +0000184
Miss Islington (bot)809c3fa2021-06-14 06:43:48 -0700185 The cache keeps references to the arguments and return values until they age
186 out of the cache or until the cache is cleared.
187
Raymond Hettingercc038582010-11-30 20:02:57 +0000188 An `LRU (least recently used) cache
Allen Guo3d542112020-05-12 18:54:18 -0400189 <https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_recently_used_(LRU)>`_
190 works best when the most recent calls are the best predictors of upcoming
191 calls (for example, the most popular articles on a news server tend to
192 change each day). The cache's size limit assures that the cache does not
193 grow without bound on long-running processes such as web servers.
Raymond Hettinger7496b412010-11-30 19:15:45 +0000194
Raymond Hettingerf0e0f202018-11-25 16:24:52 -0800195 In general, the LRU cache should only be used when you want to reuse
196 previously computed values. Accordingly, it doesn't make sense to cache
197 functions with side-effects, functions that need to create distinct mutable
198 objects on each call, or impure functions such as time() or random().
199
Raymond Hettingercc038582010-11-30 20:02:57 +0000200 Example of an LRU cache for static web content::
Raymond Hettinger7496b412010-11-30 19:15:45 +0000201
Raymond Hettinger17328e42013-04-06 20:27:33 -0700202 @lru_cache(maxsize=32)
Raymond Hettinger7496b412010-11-30 19:15:45 +0000203 def get_pep(num):
204 'Retrieve text of a Python Enhancement Proposal'
205 resource = 'http://www.python.org/dev/peps/pep-%04d/' % num
206 try:
207 with urllib.request.urlopen(resource) as s:
208 return s.read()
209 except urllib.error.HTTPError:
210 return 'Not Found'
211
212 >>> for n in 8, 290, 308, 320, 8, 218, 320, 279, 289, 320, 9991:
213 ... pep = get_pep(n)
214 ... print(n, len(pep))
215
Raymond Hettinger17328e42013-04-06 20:27:33 -0700216 >>> get_pep.cache_info()
217 CacheInfo(hits=3, misses=8, maxsize=32, currsize=8)
Georg Brandl2e7346a2010-07-31 18:09:23 +0000218
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000219 Example of efficiently computing
Georg Brandl5d941342016-02-26 19:37:12 +0100220 `Fibonacci numbers <https://en.wikipedia.org/wiki/Fibonacci_number>`_
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000221 using a cache to implement a
Georg Brandl5d941342016-02-26 19:37:12 +0100222 `dynamic programming <https://en.wikipedia.org/wiki/Dynamic_programming>`_
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000223 technique::
224
225 @lru_cache(maxsize=None)
226 def fib(n):
227 if n < 2:
228 return n
229 return fib(n-1) + fib(n-2)
230
Raymond Hettinger17328e42013-04-06 20:27:33 -0700231 >>> [fib(n) for n in range(16)]
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000232 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
233
Raymond Hettinger17328e42013-04-06 20:27:33 -0700234 >>> fib.cache_info()
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000235 CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)
236
Georg Brandl2e7346a2010-07-31 18:09:23 +0000237 .. versionadded:: 3.2
238
Raymond Hettingercd9fdfd2011-10-20 08:57:45 -0700239 .. versionchanged:: 3.3
240 Added the *typed* option.
241
Raymond Hettingerb8218682019-05-26 11:27:35 -0700242 .. versionchanged:: 3.8
243 Added the *user_function* option.
244
Manjusaka051ff522019-11-12 15:30:18 +0800245 .. versionadded:: 3.9
246 Added the function :func:`cache_parameters`
247
Georg Brandl8a1caa22010-07-29 16:01:11 +0000248.. decorator:: total_ordering
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000249
250 Given a class defining one or more rich comparison ordering methods, this
Benjamin Peterson08bf91c2010-04-11 16:12:57 +0000251 class decorator supplies the rest. This simplifies the effort involved
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000252 in specifying all of the possible rich comparison operations:
253
254 The class must define one of :meth:`__lt__`, :meth:`__le__`,
255 :meth:`__gt__`, or :meth:`__ge__`.
256 In addition, the class should supply an :meth:`__eq__` method.
257
258 For example::
259
260 @total_ordering
261 class Student:
Nick Coghlanf05d9812013-10-02 00:02:03 +1000262 def _is_valid_operand(self, other):
263 return (hasattr(other, "lastname") and
264 hasattr(other, "firstname"))
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000265 def __eq__(self, other):
Nick Coghlanf05d9812013-10-02 00:02:03 +1000266 if not self._is_valid_operand(other):
267 return NotImplemented
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000268 return ((self.lastname.lower(), self.firstname.lower()) ==
269 (other.lastname.lower(), other.firstname.lower()))
270 def __lt__(self, other):
Nick Coghlanf05d9812013-10-02 00:02:03 +1000271 if not self._is_valid_operand(other):
272 return NotImplemented
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000273 return ((self.lastname.lower(), self.firstname.lower()) <
274 (other.lastname.lower(), other.firstname.lower()))
275
Nick Coghlanf05d9812013-10-02 00:02:03 +1000276 .. note::
277
278 While this decorator makes it easy to create well behaved totally
279 ordered types, it *does* come at the cost of slower execution and
280 more complex stack traces for the derived comparison methods. If
281 performance benchmarking indicates this is a bottleneck for a given
282 application, implementing all six rich comparison methods instead is
283 likely to provide an easy speed boost.
284
Ben Avrahamibef7d292020-10-06 20:40:50 +0300285 .. note::
286
287 This decorator makes no attempt to override methods that have been
288 declared in the class *or its superclasses*. Meaning that if a
289 superclass defines a comparison operator, *total_ordering* will not
290 implement it again, even if the original method is abstract.
291
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000292 .. versionadded:: 3.2
293
Nick Coghlanf05d9812013-10-02 00:02:03 +1000294 .. versionchanged:: 3.4
295 Returning NotImplemented from the underlying comparison function for
296 unrecognised types is now supported.
Georg Brandl67b21b72010-08-17 15:07:14 +0000297
Serhiy Storchaka2085bd02019-06-01 11:00:15 +0300298.. function:: partial(func, /, *args, **keywords)
Georg Brandl116aa622007-08-15 14:28:22 +0000299
Andrei Petre83a07652018-10-22 23:11:20 -0700300 Return a new :ref:`partial object<partial-objects>` which when called
301 will behave like *func* called with the positional arguments *args*
302 and keyword arguments *keywords*. If more arguments are supplied to the
303 call, they are appended to *args*. If additional keyword arguments are
304 supplied, they extend and override *keywords*.
Georg Brandl116aa622007-08-15 14:28:22 +0000305 Roughly equivalent to::
306
Serhiy Storchaka2085bd02019-06-01 11:00:15 +0300307 def partial(func, /, *args, **keywords):
Georg Brandl116aa622007-08-15 14:28:22 +0000308 def newfunc(*fargs, **fkeywords):
Sergey Fedoseevb981fec2018-10-20 02:42:07 +0500309 newkeywords = {**keywords, **fkeywords}
Martin Panter0c0da482016-06-12 01:46:50 +0000310 return func(*args, *fargs, **newkeywords)
Georg Brandl116aa622007-08-15 14:28:22 +0000311 newfunc.func = func
312 newfunc.args = args
313 newfunc.keywords = keywords
314 return newfunc
315
316 The :func:`partial` is used for partial function application which "freezes"
317 some portion of a function's arguments and/or keywords resulting in a new object
318 with a simplified signature. For example, :func:`partial` can be used to create
319 a callable that behaves like the :func:`int` function where the *base* argument
Christian Heimesfe337bf2008-03-23 21:54:12 +0000320 defaults to two:
Georg Brandl116aa622007-08-15 14:28:22 +0000321
Christian Heimesfe337bf2008-03-23 21:54:12 +0000322 >>> from functools import partial
Georg Brandl116aa622007-08-15 14:28:22 +0000323 >>> basetwo = partial(int, base=2)
324 >>> basetwo.__doc__ = 'Convert base 2 string to an int.'
325 >>> basetwo('10010')
326 18
327
328
Serhiy Storchaka70c5f2a2019-06-01 11:38:24 +0300329.. class:: partialmethod(func, /, *args, **keywords)
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000330
331 Return a new :class:`partialmethod` descriptor which behaves
332 like :class:`partial` except that it is designed to be used as a method
333 definition rather than being directly callable.
334
335 *func* must be a :term:`descriptor` or a callable (objects which are both,
336 like normal functions, are handled as descriptors).
337
338 When *func* is a descriptor (such as a normal Python function,
339 :func:`classmethod`, :func:`staticmethod`, :func:`abstractmethod` or
340 another instance of :class:`partialmethod`), calls to ``__get__`` are
341 delegated to the underlying descriptor, and an appropriate
Andrei Petre83a07652018-10-22 23:11:20 -0700342 :ref:`partial object<partial-objects>` returned as the result.
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000343
344 When *func* is a non-descriptor callable, an appropriate bound method is
345 created dynamically. This behaves like a normal Python function when
346 used as a method: the *self* argument will be inserted as the first
347 positional argument, even before the *args* and *keywords* supplied to
348 the :class:`partialmethod` constructor.
349
350 Example::
351
Serhiy Storchakae042a452019-06-10 13:35:52 +0300352 >>> class Cell:
Benjamin Peterson3a434032014-03-30 15:07:09 -0400353 ... def __init__(self):
354 ... self._alive = False
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000355 ... @property
356 ... def alive(self):
357 ... return self._alive
358 ... def set_state(self, state):
359 ... self._alive = bool(state)
Nick Coghlan3daaf5f2013-11-04 23:32:16 +1000360 ... set_alive = partialmethod(set_state, True)
361 ... set_dead = partialmethod(set_state, False)
Nick Coghlanf4cb48a2013-11-03 16:41:46 +1000362 ...
363 >>> c = Cell()
364 >>> c.alive
365 False
366 >>> c.set_alive()
367 >>> c.alive
368 True
369
370 .. versionadded:: 3.4
371
372
Georg Brandl58f9e4f2008-04-19 22:18:33 +0000373.. function:: reduce(function, iterable[, initializer])
Georg Brandl116aa622007-08-15 14:28:22 +0000374
Brendan Jurd9df10022018-10-01 16:52:10 +1000375 Apply *function* of two arguments cumulatively to the items of *iterable*, from
376 left to right, so as to reduce the iterable to a single value. For example,
Georg Brandl116aa622007-08-15 14:28:22 +0000377 ``reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])`` calculates ``((((1+2)+3)+4)+5)``.
378 The left argument, *x*, is the accumulated value and the right argument, *y*, is
Brendan Jurd9df10022018-10-01 16:52:10 +1000379 the update value from the *iterable*. If the optional *initializer* is present,
380 it is placed before the items of the iterable in the calculation, and serves as
381 a default when the iterable is empty. If *initializer* is not given and
382 *iterable* contains only one item, the first item is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000383
Raymond Hettinger558dcf32014-12-16 18:16:57 -0800384 Roughly equivalent to::
Raymond Hettinger64801682013-10-12 16:04:17 -0700385
386 def reduce(function, iterable, initializer=None):
387 it = iter(iterable)
388 if initializer is None:
389 value = next(it)
390 else:
391 value = initializer
392 for element in it:
393 value = function(value, element)
394 return value
395
Gerrit Hollbd81cbd2018-07-04 23:26:32 +0100396 See :func:`itertools.accumulate` for an iterator that yields all intermediate
397 values.
Georg Brandl116aa622007-08-15 14:28:22 +0000398
Daisuke Miyakawa0e61e672017-10-12 23:39:43 +0900399.. decorator:: singledispatch
Łukasz Langa6f692512013-06-05 12:20:24 +0200400
Daisuke Miyakawa0e61e672017-10-12 23:39:43 +0900401 Transform a function into a :term:`single-dispatch <single
Łukasz Langafdcf2b72013-06-07 22:54:03 +0200402 dispatch>` :term:`generic function`.
Łukasz Langa6f692512013-06-05 12:20:24 +0200403
404 To define a generic function, decorate it with the ``@singledispatch``
405 decorator. Note that the dispatch happens on the type of the first argument,
406 create your function accordingly::
407
408 >>> from functools import singledispatch
409 >>> @singledispatch
410 ... def fun(arg, verbose=False):
411 ... if verbose:
412 ... print("Let me just say,", end=" ")
413 ... print(arg)
414
415 To add overloaded implementations to the function, use the :func:`register`
Łukasz Langae5697532017-12-11 13:56:31 -0800416 attribute of the generic function. It is a decorator. For functions
417 annotated with types, the decorator will infer the type of the first
418 argument automatically::
Łukasz Langa6f692512013-06-05 12:20:24 +0200419
Łukasz Langae5697532017-12-11 13:56:31 -0800420 >>> @fun.register
421 ... def _(arg: int, verbose=False):
Łukasz Langa6f692512013-06-05 12:20:24 +0200422 ... if verbose:
423 ... print("Strength in numbers, eh?", end=" ")
424 ... print(arg)
425 ...
Łukasz Langae5697532017-12-11 13:56:31 -0800426 >>> @fun.register
427 ... def _(arg: list, verbose=False):
Łukasz Langa6f692512013-06-05 12:20:24 +0200428 ... if verbose:
429 ... print("Enumerate this:")
430 ... for i, elem in enumerate(arg):
431 ... print(i, elem)
432
Łukasz Langae5697532017-12-11 13:56:31 -0800433 For code which doesn't use type annotations, the appropriate type
434 argument can be passed explicitly to the decorator itself::
435
436 >>> @fun.register(complex)
437 ... def _(arg, verbose=False):
438 ... if verbose:
439 ... print("Better than complicated.", end=" ")
440 ... print(arg.real, arg.imag)
441 ...
442
443
Łukasz Langa6f692512013-06-05 12:20:24 +0200444 To enable registering lambdas and pre-existing functions, the
445 :func:`register` attribute can be used in a functional form::
446
447 >>> def nothing(arg, verbose=False):
448 ... print("Nothing.")
449 ...
450 >>> fun.register(type(None), nothing)
451
452 The :func:`register` attribute returns the undecorated function which
453 enables decorator stacking, pickling, as well as creating unit tests for
454 each variant independently::
455
456 >>> @fun.register(float)
457 ... @fun.register(Decimal)
458 ... def fun_num(arg, verbose=False):
459 ... if verbose:
460 ... print("Half of your number:", end=" ")
461 ... print(arg / 2)
462 ...
463 >>> fun_num is fun
464 False
465
466 When called, the generic function dispatches on the type of the first
467 argument::
468
469 >>> fun("Hello, world.")
470 Hello, world.
471 >>> fun("test.", verbose=True)
472 Let me just say, test.
473 >>> fun(42, verbose=True)
474 Strength in numbers, eh? 42
475 >>> fun(['spam', 'spam', 'eggs', 'spam'], verbose=True)
476 Enumerate this:
477 0 spam
478 1 spam
479 2 eggs
480 3 spam
481 >>> fun(None)
482 Nothing.
483 >>> fun(1.23)
484 0.615
485
486 Where there is no registered implementation for a specific type, its
487 method resolution order is used to find a more generic implementation.
488 The original function decorated with ``@singledispatch`` is registered
489 for the base ``object`` type, which means it is used if no better
490 implementation is found.
491
Batuhan Taşkaya24555ce2019-11-19 11:16:46 +0300492 If an implementation registered to :term:`abstract base class`, virtual
493 subclasses will be dispatched to that implementation::
494
495 >>> from collections.abc import Mapping
496 >>> @fun.register
497 ... def _(arg: Mapping, verbose=False):
498 ... if verbose:
499 ... print("Keys & Values")
500 ... for key, value in arg.items():
501 ... print(key, "=>", value)
502 ...
503 >>> fun({"a": "b"})
504 a => b
505
Łukasz Langa6f692512013-06-05 12:20:24 +0200506 To check which implementation will the generic function choose for
507 a given type, use the ``dispatch()`` attribute::
508
509 >>> fun.dispatch(float)
510 <function fun_num at 0x1035a2840>
511 >>> fun.dispatch(dict) # note: default implementation
512 <function fun at 0x103fe0000>
513
514 To access all registered implementations, use the read-only ``registry``
515 attribute::
516
517 >>> fun.registry.keys()
518 dict_keys([<class 'NoneType'>, <class 'int'>, <class 'object'>,
519 <class 'decimal.Decimal'>, <class 'list'>,
520 <class 'float'>])
521 >>> fun.registry[float]
522 <function fun_num at 0x1035a2840>
523 >>> fun.registry[object]
524 <function fun at 0x103fe0000>
525
526 .. versionadded:: 3.4
527
Łukasz Langae5697532017-12-11 13:56:31 -0800528 .. versionchanged:: 3.7
529 The :func:`register` attribute supports using type annotations.
530
Łukasz Langa6f692512013-06-05 12:20:24 +0200531
Ethan Smithc6512752018-05-26 16:38:33 -0400532.. class:: singledispatchmethod(func)
533
534 Transform a method into a :term:`single-dispatch <single
535 dispatch>` :term:`generic function`.
536
537 To define a generic method, decorate it with the ``@singledispatchmethod``
538 decorator. Note that the dispatch happens on the type of the first non-self
539 or non-cls argument, create your function accordingly::
540
541 class Negator:
542 @singledispatchmethod
543 def neg(self, arg):
544 raise NotImplementedError("Cannot negate a")
545
546 @neg.register
547 def _(self, arg: int):
548 return -arg
549
550 @neg.register
551 def _(self, arg: bool):
552 return not arg
553
554 ``@singledispatchmethod`` supports nesting with other decorators such as
555 ``@classmethod``. Note that to allow for ``dispatcher.register``,
556 ``singledispatchmethod`` must be the *outer most* decorator. Here is the
557 ``Negator`` class with the ``neg`` methods being class bound::
558
559 class Negator:
560 @singledispatchmethod
561 @classmethod
562 def neg(cls, arg):
563 raise NotImplementedError("Cannot negate a")
564
565 @neg.register
566 @classmethod
567 def _(cls, arg: int):
568 return -arg
569
570 @neg.register
571 @classmethod
572 def _(cls, arg: bool):
573 return not arg
574
575 The same pattern can be used for other similar decorators: ``staticmethod``,
576 ``abstractmethod``, and others.
577
Inada Naokibc284f02019-03-27 18:15:17 +0900578 .. versionadded:: 3.8
579
580
Georg Brandl036490d2009-05-17 13:00:36 +0000581.. function:: update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Georg Brandl116aa622007-08-15 14:28:22 +0000582
583 Update a *wrapper* function to look like the *wrapped* function. The optional
584 arguments are tuples to specify which attributes of the original function are
585 assigned directly to the matching attributes on the wrapper function and which
586 attributes of the wrapper function are updated with the corresponding attributes
587 from the original function. The default values for these arguments are the
Berker Peksag472233e2016-04-18 21:20:50 +0300588 module level constants ``WRAPPER_ASSIGNMENTS`` (which assigns to the wrapper
589 function's ``__module__``, ``__name__``, ``__qualname__``, ``__annotations__``
590 and ``__doc__``, the documentation string) and ``WRAPPER_UPDATES`` (which
591 updates the wrapper function's ``__dict__``, i.e. the instance dictionary).
Georg Brandl116aa622007-08-15 14:28:22 +0000592
Nick Coghlan98876832010-08-17 06:17:18 +0000593 To allow access to the original function for introspection and other purposes
594 (e.g. bypassing a caching decorator such as :func:`lru_cache`), this function
Nick Coghlan24c05bc2013-07-15 21:13:08 +1000595 automatically adds a ``__wrapped__`` attribute to the wrapper that refers to
596 the function being wrapped.
Nick Coghlan98876832010-08-17 06:17:18 +0000597
Christian Heimesd8654cf2007-12-02 15:22:16 +0000598 The main intended use for this function is in :term:`decorator` functions which
599 wrap the decorated function and return the wrapper. If the wrapper function is
600 not updated, the metadata of the returned function will reflect the wrapper
Georg Brandl116aa622007-08-15 14:28:22 +0000601 definition rather than the original function definition, which is typically less
602 than helpful.
603
Nick Coghlan98876832010-08-17 06:17:18 +0000604 :func:`update_wrapper` may be used with callables other than functions. Any
605 attributes named in *assigned* or *updated* that are missing from the object
606 being wrapped are ignored (i.e. this function will not attempt to set them
607 on the wrapper function). :exc:`AttributeError` is still raised if the
608 wrapper function itself is missing any attributes named in *updated*.
609
610 .. versionadded:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000611 Automatic addition of the ``__wrapped__`` attribute.
Nick Coghlan98876832010-08-17 06:17:18 +0000612
613 .. versionadded:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000614 Copying of the ``__annotations__`` attribute by default.
Nick Coghlan98876832010-08-17 06:17:18 +0000615
616 .. versionchanged:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000617 Missing attributes no longer trigger an :exc:`AttributeError`.
618
Nick Coghlan24c05bc2013-07-15 21:13:08 +1000619 .. versionchanged:: 3.4
620 The ``__wrapped__`` attribute now always refers to the wrapped
621 function, even if that function defined a ``__wrapped__`` attribute.
622 (see :issue:`17482`)
623
Georg Brandl116aa622007-08-15 14:28:22 +0000624
Georg Brandl8a1caa22010-07-29 16:01:11 +0000625.. decorator:: wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Georg Brandl116aa622007-08-15 14:28:22 +0000626
Ezio Melotti67f6d5f2014-08-05 08:14:28 +0300627 This is a convenience function for invoking :func:`update_wrapper` as a
628 function decorator when defining a wrapper function. It is equivalent to
629 ``partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)``.
630 For example::
Georg Brandl116aa622007-08-15 14:28:22 +0000631
Christian Heimesfe337bf2008-03-23 21:54:12 +0000632 >>> from functools import wraps
Georg Brandl116aa622007-08-15 14:28:22 +0000633 >>> def my_decorator(f):
634 ... @wraps(f)
635 ... def wrapper(*args, **kwds):
Georg Brandl6911e3c2007-09-04 07:15:32 +0000636 ... print('Calling decorated function')
Georg Brandl116aa622007-08-15 14:28:22 +0000637 ... return f(*args, **kwds)
638 ... return wrapper
639 ...
640 >>> @my_decorator
641 ... def example():
642 ... """Docstring"""
Georg Brandl6911e3c2007-09-04 07:15:32 +0000643 ... print('Called example function')
Georg Brandl116aa622007-08-15 14:28:22 +0000644 ...
645 >>> example()
646 Calling decorated function
647 Called example function
648 >>> example.__name__
649 'example'
650 >>> example.__doc__
651 'Docstring'
652
653 Without the use of this decorator factory, the name of the example function
654 would have been ``'wrapper'``, and the docstring of the original :func:`example`
655 would have been lost.
656
657
658.. _partial-objects:
659
660:class:`partial` Objects
661------------------------
662
663:class:`partial` objects are callable objects created by :func:`partial`. They
664have three read-only attributes:
665
666
667.. attribute:: partial.func
668
669 A callable object or function. Calls to the :class:`partial` object will be
670 forwarded to :attr:`func` with new arguments and keywords.
671
672
673.. attribute:: partial.args
674
675 The leftmost positional arguments that will be prepended to the positional
676 arguments provided to a :class:`partial` object call.
677
678
679.. attribute:: partial.keywords
680
681 The keyword arguments that will be supplied when the :class:`partial` object is
682 called.
683
684:class:`partial` objects are like :class:`function` objects in that they are
685callable, weak referencable, and can have attributes. There are some important
Martin Panterbae5d812016-06-18 03:57:31 +0000686differences. For instance, the :attr:`~definition.__name__` and :attr:`__doc__` attributes
Georg Brandl116aa622007-08-15 14:28:22 +0000687are not created automatically. Also, :class:`partial` objects defined in
688classes behave like static methods and do not transform into bound methods
Raymond Hettinger48be6b12020-10-24 18:17:17 -0700689during instance attribute look-up.