• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`functools` --- Higher-order functions and operations on callable objects
2==============================================================================
3
4.. module:: functools
5   :synopsis: Higher-order functions and operations on callable objects.
6
7.. moduleauthor:: Peter Harris <scav@blueyonder.co.uk>
8.. moduleauthor:: Raymond Hettinger <python@rcn.com>
9.. moduleauthor:: Nick Coghlan <ncoghlan@gmail.com>
10.. moduleauthor:: Łukasz Langa <lukasz@langa.pl>
11.. sectionauthor:: Peter Harris <scav@blueyonder.co.uk>
12
13**Source code:** :source:`Lib/functools.py`
14
15--------------
16
17The :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
21The :mod:`functools` module defines the following functions:
22
23.. 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
56.. function:: cmp_to_key(func)
57
58   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`,
60   :func:`max`, :func:`heapq.nlargest`, :func:`heapq.nsmallest`,
61   :func:`itertools.groupby`).  This function is primarily used as a transition
62   tool for programs being converted from Python 2 which supported the use of
63   comparison functions.
64
65   A comparison function is any callable that accept two arguments, compares them,
66   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
68   argument and returns another value to be used as the sort key.
69
70   Example::
71
72       sorted(iterable, key=cmp_to_key(locale.strcoll))  # locale-aware sort order
73
74   For sorting examples and a brief sorting tutorial, see :ref:`sortinghowto`.
75
76   .. versionadded:: 3.2
77
78
79.. decorator:: lru_cache(user_function)
80               lru_cache(maxsize=128, typed=False)
81
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
86   Since a dictionary is used to cache results, the positional and keyword
87   arguments to the function must be hashable.
88
89   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
94   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
103   If *maxsize* is set to ``None``, the LRU feature is disabled and the cache can
104   grow without bound.  The LRU feature performs best when *maxsize* is a
105   power-of-two.
106
107   If *typed* is set to true, function arguments of different types will be
108   cached separately.  For example, ``f(3)`` and ``f(3.0)`` will be treated
109   as distinct calls with distinct results.
110
111   To help measure the effectiveness of the cache and tune the *maxsize*
112   parameter, the wrapped function is instrumented with a :func:`cache_info`
113   function that returns a :term:`named tuple` showing *hits*, *misses*,
114   *maxsize* and *currsize*.  In a multi-threaded environment, the hits
115   and misses are approximate.
116
117   The decorator also provides a :func:`cache_clear` function for clearing or
118   invalidating the cache.
119
120   The original underlying function is accessible through the
121   :attr:`__wrapped__` attribute.  This is useful for introspection, for
122   bypassing the cache, or for rewrapping the function with a different cache.
123
124   An `LRU (least recently used) cache
125   <https://en.wikipedia.org/wiki/Cache_algorithms#Examples>`_ works
126   best when the most recent calls are the best predictors of upcoming calls (for
127   example, the most popular articles on a news server tend to change each day).
128   The cache's size limit assures that the cache does not grow without bound on
129   long-running processes such as web servers.
130
131   In general, the LRU cache should only be used when you want to reuse
132   previously computed values.  Accordingly, it doesn't make sense to cache
133   functions with side-effects, functions that need to create distinct mutable
134   objects on each call, or impure functions such as time() or random().
135
136   Example of an LRU cache for static web content::
137
138        @lru_cache(maxsize=32)
139        def get_pep(num):
140            'Retrieve text of a Python Enhancement Proposal'
141            resource = 'http://www.python.org/dev/peps/pep-%04d/' % num
142            try:
143                with urllib.request.urlopen(resource) as s:
144                    return s.read()
145            except urllib.error.HTTPError:
146                return 'Not Found'
147
148        >>> for n in 8, 290, 308, 320, 8, 218, 320, 279, 289, 320, 9991:
149        ...     pep = get_pep(n)
150        ...     print(n, len(pep))
151
152        >>> get_pep.cache_info()
153        CacheInfo(hits=3, misses=8, maxsize=32, currsize=8)
154
155   Example of efficiently computing
156   `Fibonacci numbers <https://en.wikipedia.org/wiki/Fibonacci_number>`_
157   using a cache to implement a
158   `dynamic programming <https://en.wikipedia.org/wiki/Dynamic_programming>`_
159   technique::
160
161        @lru_cache(maxsize=None)
162        def fib(n):
163            if n < 2:
164                return n
165            return fib(n-1) + fib(n-2)
166
167        >>> [fib(n) for n in range(16)]
168        [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
169
170        >>> fib.cache_info()
171        CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)
172
173   .. versionadded:: 3.2
174
175   .. versionchanged:: 3.3
176      Added the *typed* option.
177
178   .. versionchanged:: 3.8
179      Added the *user_function* option.
180
181.. decorator:: total_ordering
182
183   Given a class defining one or more rich comparison ordering methods, this
184   class decorator supplies the rest.  This simplifies the effort involved
185   in specifying all of the possible rich comparison operations:
186
187   The class must define one of :meth:`__lt__`, :meth:`__le__`,
188   :meth:`__gt__`, or :meth:`__ge__`.
189   In addition, the class should supply an :meth:`__eq__` method.
190
191   For example::
192
193       @total_ordering
194       class Student:
195           def _is_valid_operand(self, other):
196               return (hasattr(other, "lastname") and
197                       hasattr(other, "firstname"))
198           def __eq__(self, other):
199               if not self._is_valid_operand(other):
200                   return NotImplemented
201               return ((self.lastname.lower(), self.firstname.lower()) ==
202                       (other.lastname.lower(), other.firstname.lower()))
203           def __lt__(self, other):
204               if not self._is_valid_operand(other):
205                   return NotImplemented
206               return ((self.lastname.lower(), self.firstname.lower()) <
207                       (other.lastname.lower(), other.firstname.lower()))
208
209   .. note::
210
211      While this decorator makes it easy to create well behaved totally
212      ordered types, it *does* come at the cost of slower execution and
213      more complex stack traces for the derived comparison methods. If
214      performance benchmarking indicates this is a bottleneck for a given
215      application, implementing all six rich comparison methods instead is
216      likely to provide an easy speed boost.
217
218   .. versionadded:: 3.2
219
220   .. versionchanged:: 3.4
221      Returning NotImplemented from the underlying comparison function for
222      unrecognised types is now supported.
223
224.. function:: partial(func, /, *args, **keywords)
225
226   Return a new :ref:`partial object<partial-objects>` which when called
227   will behave like *func* called with the positional arguments *args*
228   and keyword arguments *keywords*. If more arguments are supplied to the
229   call, they are appended to *args*. If additional keyword arguments are
230   supplied, they extend and override *keywords*.
231   Roughly equivalent to::
232
233      def partial(func, /, *args, **keywords):
234          def newfunc(*fargs, **fkeywords):
235              newkeywords = {**keywords, **fkeywords}
236              return func(*args, *fargs, **newkeywords)
237          newfunc.func = func
238          newfunc.args = args
239          newfunc.keywords = keywords
240          return newfunc
241
242   The :func:`partial` is used for partial function application which "freezes"
243   some portion of a function's arguments and/or keywords resulting in a new object
244   with a simplified signature.  For example, :func:`partial` can be used to create
245   a callable that behaves like the :func:`int` function where the *base* argument
246   defaults to two:
247
248      >>> from functools import partial
249      >>> basetwo = partial(int, base=2)
250      >>> basetwo.__doc__ = 'Convert base 2 string to an int.'
251      >>> basetwo('10010')
252      18
253
254
255.. class:: partialmethod(func, /, *args, **keywords)
256
257   Return a new :class:`partialmethod` descriptor which behaves
258   like :class:`partial` except that it is designed to be used as a method
259   definition rather than being directly callable.
260
261   *func* must be a :term:`descriptor` or a callable (objects which are both,
262   like normal functions, are handled as descriptors).
263
264   When *func* is a descriptor (such as a normal Python function,
265   :func:`classmethod`, :func:`staticmethod`, :func:`abstractmethod` or
266   another instance of :class:`partialmethod`), calls to ``__get__`` are
267   delegated to the underlying descriptor, and an appropriate
268   :ref:`partial object<partial-objects>` returned as the result.
269
270   When *func* is a non-descriptor callable, an appropriate bound method is
271   created dynamically. This behaves like a normal Python function when
272   used as a method: the *self* argument will be inserted as the first
273   positional argument, even before the *args* and *keywords* supplied to
274   the :class:`partialmethod` constructor.
275
276   Example::
277
278      >>> class Cell(object):
279      ...     def __init__(self):
280      ...         self._alive = False
281      ...     @property
282      ...     def alive(self):
283      ...         return self._alive
284      ...     def set_state(self, state):
285      ...         self._alive = bool(state)
286      ...     set_alive = partialmethod(set_state, True)
287      ...     set_dead = partialmethod(set_state, False)
288      ...
289      >>> c = Cell()
290      >>> c.alive
291      False
292      >>> c.set_alive()
293      >>> c.alive
294      True
295
296   .. versionadded:: 3.4
297
298
299.. function:: reduce(function, iterable[, initializer])
300
301   Apply *function* of two arguments cumulatively to the items of *iterable*, from
302   left to right, so as to reduce the iterable to a single value.  For example,
303   ``reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])`` calculates ``((((1+2)+3)+4)+5)``.
304   The left argument, *x*, is the accumulated value and the right argument, *y*, is
305   the update value from the *iterable*.  If the optional *initializer* is present,
306   it is placed before the items of the iterable in the calculation, and serves as
307   a default when the iterable is empty.  If *initializer* is not given and
308   *iterable* contains only one item, the first item is returned.
309
310   Roughly equivalent to::
311
312      def reduce(function, iterable, initializer=None):
313          it = iter(iterable)
314          if initializer is None:
315              value = next(it)
316          else:
317              value = initializer
318          for element in it:
319              value = function(value, element)
320          return value
321
322   See :func:`itertools.accumulate` for an iterator that yields all intermediate
323   values.
324
325.. decorator:: singledispatch
326
327   Transform a function into a :term:`single-dispatch <single
328   dispatch>` :term:`generic function`.
329
330   To define a generic function, decorate it with the ``@singledispatch``
331   decorator. Note that the dispatch happens on the type of the first argument,
332   create your function accordingly::
333
334     >>> from functools import singledispatch
335     >>> @singledispatch
336     ... def fun(arg, verbose=False):
337     ...     if verbose:
338     ...         print("Let me just say,", end=" ")
339     ...     print(arg)
340
341   To add overloaded implementations to the function, use the :func:`register`
342   attribute of the generic function.  It is a decorator.  For functions
343   annotated with types, the decorator will infer the type of the first
344   argument automatically::
345
346     >>> @fun.register
347     ... def _(arg: int, verbose=False):
348     ...     if verbose:
349     ...         print("Strength in numbers, eh?", end=" ")
350     ...     print(arg)
351     ...
352     >>> @fun.register
353     ... def _(arg: list, verbose=False):
354     ...     if verbose:
355     ...         print("Enumerate this:")
356     ...     for i, elem in enumerate(arg):
357     ...         print(i, elem)
358
359   For code which doesn't use type annotations, the appropriate type
360   argument can be passed explicitly to the decorator itself::
361
362     >>> @fun.register(complex)
363     ... def _(arg, verbose=False):
364     ...     if verbose:
365     ...         print("Better than complicated.", end=" ")
366     ...     print(arg.real, arg.imag)
367     ...
368
369
370   To enable registering lambdas and pre-existing functions, the
371   :func:`register` attribute can be used in a functional form::
372
373     >>> def nothing(arg, verbose=False):
374     ...     print("Nothing.")
375     ...
376     >>> fun.register(type(None), nothing)
377
378   The :func:`register` attribute returns the undecorated function which
379   enables decorator stacking, pickling, as well as creating unit tests for
380   each variant independently::
381
382     >>> @fun.register(float)
383     ... @fun.register(Decimal)
384     ... def fun_num(arg, verbose=False):
385     ...     if verbose:
386     ...         print("Half of your number:", end=" ")
387     ...     print(arg / 2)
388     ...
389     >>> fun_num is fun
390     False
391
392   When called, the generic function dispatches on the type of the first
393   argument::
394
395     >>> fun("Hello, world.")
396     Hello, world.
397     >>> fun("test.", verbose=True)
398     Let me just say, test.
399     >>> fun(42, verbose=True)
400     Strength in numbers, eh? 42
401     >>> fun(['spam', 'spam', 'eggs', 'spam'], verbose=True)
402     Enumerate this:
403     0 spam
404     1 spam
405     2 eggs
406     3 spam
407     >>> fun(None)
408     Nothing.
409     >>> fun(1.23)
410     0.615
411
412   Where there is no registered implementation for a specific type, its
413   method resolution order is used to find a more generic implementation.
414   The original function decorated with ``@singledispatch`` is registered
415   for the base ``object`` type, which means it is used if no better
416   implementation is found.
417
418   To check which implementation will the generic function choose for
419   a given type, use the ``dispatch()`` attribute::
420
421     >>> fun.dispatch(float)
422     <function fun_num at 0x1035a2840>
423     >>> fun.dispatch(dict)    # note: default implementation
424     <function fun at 0x103fe0000>
425
426   To access all registered implementations, use the read-only ``registry``
427   attribute::
428
429    >>> fun.registry.keys()
430    dict_keys([<class 'NoneType'>, <class 'int'>, <class 'object'>,
431              <class 'decimal.Decimal'>, <class 'list'>,
432              <class 'float'>])
433    >>> fun.registry[float]
434    <function fun_num at 0x1035a2840>
435    >>> fun.registry[object]
436    <function fun at 0x103fe0000>
437
438   .. versionadded:: 3.4
439
440   .. versionchanged:: 3.7
441      The :func:`register` attribute supports using type annotations.
442
443
444.. class:: singledispatchmethod(func)
445
446   Transform a method into a :term:`single-dispatch <single
447   dispatch>` :term:`generic function`.
448
449   To define a generic method, decorate it with the ``@singledispatchmethod``
450   decorator. Note that the dispatch happens on the type of the first non-self
451   or non-cls argument, create your function accordingly::
452
453    class Negator:
454        @singledispatchmethod
455        def neg(self, arg):
456            raise NotImplementedError("Cannot negate a")
457
458        @neg.register
459        def _(self, arg: int):
460            return -arg
461
462        @neg.register
463        def _(self, arg: bool):
464            return not arg
465
466   ``@singledispatchmethod`` supports nesting with other decorators such as
467   ``@classmethod``. Note that to allow for ``dispatcher.register``,
468   ``singledispatchmethod`` must be the *outer most* decorator. Here is the
469   ``Negator`` class with the ``neg`` methods being class bound::
470
471    class Negator:
472        @singledispatchmethod
473        @classmethod
474        def neg(cls, arg):
475            raise NotImplementedError("Cannot negate a")
476
477        @neg.register
478        @classmethod
479        def _(cls, arg: int):
480            return -arg
481
482        @neg.register
483        @classmethod
484        def _(cls, arg: bool):
485            return not arg
486
487   The same pattern can be used for other similar decorators: ``staticmethod``,
488   ``abstractmethod``, and others.
489
490   .. versionadded:: 3.8
491
492
493.. function:: update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
494
495   Update a *wrapper* function to look like the *wrapped* function. The optional
496   arguments are tuples to specify which attributes of the original function are
497   assigned directly to the matching attributes on the wrapper function and which
498   attributes of the wrapper function are updated with the corresponding attributes
499   from the original function. The default values for these arguments are the
500   module level constants ``WRAPPER_ASSIGNMENTS`` (which assigns to the wrapper
501   function's ``__module__``, ``__name__``, ``__qualname__``, ``__annotations__``
502   and ``__doc__``, the documentation string) and ``WRAPPER_UPDATES`` (which
503   updates the wrapper function's ``__dict__``, i.e. the instance dictionary).
504
505   To allow access to the original function for introspection and other purposes
506   (e.g. bypassing a caching decorator such as :func:`lru_cache`), this function
507   automatically adds a ``__wrapped__`` attribute to the wrapper that refers to
508   the function being wrapped.
509
510   The main intended use for this function is in :term:`decorator` functions which
511   wrap the decorated function and return the wrapper. If the wrapper function is
512   not updated, the metadata of the returned function will reflect the wrapper
513   definition rather than the original function definition, which is typically less
514   than helpful.
515
516   :func:`update_wrapper` may be used with callables other than functions. Any
517   attributes named in *assigned* or *updated* that are missing from the object
518   being wrapped are ignored (i.e. this function will not attempt to set them
519   on the wrapper function). :exc:`AttributeError` is still raised if the
520   wrapper function itself is missing any attributes named in *updated*.
521
522   .. versionadded:: 3.2
523      Automatic addition of the ``__wrapped__`` attribute.
524
525   .. versionadded:: 3.2
526      Copying of the ``__annotations__`` attribute by default.
527
528   .. versionchanged:: 3.2
529      Missing attributes no longer trigger an :exc:`AttributeError`.
530
531   .. versionchanged:: 3.4
532      The ``__wrapped__`` attribute now always refers to the wrapped
533      function, even if that function defined a ``__wrapped__`` attribute.
534      (see :issue:`17482`)
535
536
537.. decorator:: wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
538
539   This is a convenience function for invoking :func:`update_wrapper` as a
540   function decorator when defining a wrapper function.  It is equivalent to
541   ``partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)``.
542   For example::
543
544      >>> from functools import wraps
545      >>> def my_decorator(f):
546      ...     @wraps(f)
547      ...     def wrapper(*args, **kwds):
548      ...         print('Calling decorated function')
549      ...         return f(*args, **kwds)
550      ...     return wrapper
551      ...
552      >>> @my_decorator
553      ... def example():
554      ...     """Docstring"""
555      ...     print('Called example function')
556      ...
557      >>> example()
558      Calling decorated function
559      Called example function
560      >>> example.__name__
561      'example'
562      >>> example.__doc__
563      'Docstring'
564
565   Without the use of this decorator factory, the name of the example function
566   would have been ``'wrapper'``, and the docstring of the original :func:`example`
567   would have been lost.
568
569
570.. _partial-objects:
571
572:class:`partial` Objects
573------------------------
574
575:class:`partial` objects are callable objects created by :func:`partial`. They
576have three read-only attributes:
577
578
579.. attribute:: partial.func
580
581   A callable object or function.  Calls to the :class:`partial` object will be
582   forwarded to :attr:`func` with new arguments and keywords.
583
584
585.. attribute:: partial.args
586
587   The leftmost positional arguments that will be prepended to the positional
588   arguments provided to a :class:`partial` object call.
589
590
591.. attribute:: partial.keywords
592
593   The keyword arguments that will be supplied when the :class:`partial` object is
594   called.
595
596:class:`partial` objects are like :class:`function` objects in that they are
597callable, weak referencable, and can have attributes.  There are some important
598differences.  For instance, the :attr:`~definition.__name__` and :attr:`__doc__` attributes
599are not created automatically.  Also, :class:`partial` objects defined in
600classes behave like static methods and do not transform into bound methods
601during instance attribute look-up.
602