blob: 3d70955c58b588aae89c0d730d42ec0e23049cf6 [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.
Georg Brandl116aa622007-08-15 14:28:22 +00006.. moduleauthor:: Peter Harris <scav@blueyonder.co.uk>
7.. moduleauthor:: Raymond Hettinger <python@rcn.com>
8.. moduleauthor:: Nick Coghlan <ncoghlan@gmail.com>
Łukasz Langa6f692512013-06-05 12:20:24 +02009.. moduleauthor:: Łukasz Langa <lukasz@langa.pl>
Georg Brandl116aa622007-08-15 14:28:22 +000010.. sectionauthor:: Peter Harris <scav@blueyonder.co.uk>
11
Raymond Hettinger05ce0792011-01-10 21:16:07 +000012**Source code:** :source:`Lib/functools.py`
13
14--------------
Georg Brandl116aa622007-08-15 14:28:22 +000015
Georg Brandl116aa622007-08-15 14:28:22 +000016The :mod:`functools` module is for higher-order functions: functions that act on
17or return other functions. In general, any callable object can be treated as a
18function for the purposes of this module.
19
Thomas Woutersed03b412007-08-28 21:37:11 +000020The :mod:`functools` module defines the following functions:
21
Éric Araujob10089e2010-11-18 14:22:08 +000022.. function:: cmp_to_key(func)
Raymond Hettingerc50846a2010-04-05 18:56:31 +000023
Georg Brandl3b65fd72012-01-23 20:19:33 +010024 Transform an old-style comparison function to a key function. Used with
Benjamin Petersoncca65312010-08-09 02:13:10 +000025 tools that accept key functions (such as :func:`sorted`, :func:`min`,
26 :func:`max`, :func:`heapq.nlargest`, :func:`heapq.nsmallest`,
27 :func:`itertools.groupby`). This function is primarily used as a transition
Ezio Melotti9ecb6be2012-01-16 08:28:54 +020028 tool for programs being converted from Python 2 which supported the use of
Benjamin Petersoncca65312010-08-09 02:13:10 +000029 comparison functions.
Raymond Hettingerc50846a2010-04-05 18:56:31 +000030
Georg Brandl6c89a792012-01-25 22:36:25 +010031 A comparison function is any callable that accept two arguments, compares them,
Benjamin Petersoncca65312010-08-09 02:13:10 +000032 and returns a negative number for less-than, zero for equality, or a positive
33 number for greater-than. A key function is a callable that accepts one
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +000034 argument and returns another value indicating the position in the desired
Benjamin Petersoncca65312010-08-09 02:13:10 +000035 collation sequence.
Raymond Hettingerc50846a2010-04-05 18:56:31 +000036
Benjamin Petersoncca65312010-08-09 02:13:10 +000037 Example::
Raymond Hettingerc50846a2010-04-05 18:56:31 +000038
Benjamin Petersoncca65312010-08-09 02:13:10 +000039 sorted(iterable, key=cmp_to_key(locale.strcoll)) # locale-aware sort order
Raymond Hettingerc50846a2010-04-05 18:56:31 +000040
41 .. versionadded:: 3.2
42
Georg Brandl67b21b72010-08-17 15:07:14 +000043
Raymond Hettinger010ce322012-05-19 21:20:48 -070044.. decorator:: lru_cache(maxsize=128, typed=False)
Georg Brandl2e7346a2010-07-31 18:09:23 +000045
46 Decorator to wrap a function with a memoizing callable that saves up to the
47 *maxsize* most recent calls. It can save time when an expensive or I/O bound
48 function is periodically called with the same arguments.
49
Raymond Hettinger7496b412010-11-30 19:15:45 +000050 Since a dictionary is used to cache results, the positional and keyword
51 arguments to the function must be hashable.
Georg Brandl2e7346a2010-07-31 18:09:23 +000052
Raymond Hettinger7d74eff2012-06-04 00:32:15 -070053 If *maxsize* is set to None, the LRU feature is disabled and the cache can
54 grow without bound. The LRU feature performs best when *maxsize* is a
55 power-of-two.
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +000056
Raymond Hettingercd9fdfd2011-10-20 08:57:45 -070057 If *typed* is set to True, function arguments of different types will be
58 cached separately. For example, ``f(3)`` and ``f(3.0)`` will be treated
59 as distinct calls with distinct results.
60
Raymond Hettinger7496b412010-11-30 19:15:45 +000061 To help measure the effectiveness of the cache and tune the *maxsize*
62 parameter, the wrapped function is instrumented with a :func:`cache_info`
63 function that returns a :term:`named tuple` showing *hits*, *misses*,
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +000064 *maxsize* and *currsize*. In a multi-threaded environment, the hits
65 and misses are approximate.
Nick Coghlan234515a2010-11-30 06:19:46 +000066
Raymond Hettinger7496b412010-11-30 19:15:45 +000067 The decorator also provides a :func:`cache_clear` function for clearing or
68 invalidating the cache.
Georg Brandl2e7346a2010-07-31 18:09:23 +000069
Raymond Hettinger3fccfcb2010-08-17 19:19:29 +000070 The original underlying function is accessible through the
Raymond Hettinger7496b412010-11-30 19:15:45 +000071 :attr:`__wrapped__` attribute. This is useful for introspection, for
72 bypassing the cache, or for rewrapping the function with a different cache.
Nick Coghlan98876832010-08-17 06:17:18 +000073
Raymond Hettingercc038582010-11-30 20:02:57 +000074 An `LRU (least recently used) cache
Raymond Hettinger7496b412010-11-30 19:15:45 +000075 <http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used>`_ works
Raymond Hettingercd9fdfd2011-10-20 08:57:45 -070076 best when the most recent calls are the best predictors of upcoming calls (for
77 example, the most popular articles on a news server tend to change each day).
Raymond Hettinger7496b412010-11-30 19:15:45 +000078 The cache's size limit assures that the cache does not grow without bound on
79 long-running processes such as web servers.
80
Raymond Hettingercc038582010-11-30 20:02:57 +000081 Example of an LRU cache for static web content::
Raymond Hettinger7496b412010-11-30 19:15:45 +000082
Raymond Hettinger17328e42013-04-06 20:27:33 -070083 @lru_cache(maxsize=32)
Raymond Hettinger7496b412010-11-30 19:15:45 +000084 def get_pep(num):
85 'Retrieve text of a Python Enhancement Proposal'
86 resource = 'http://www.python.org/dev/peps/pep-%04d/' % num
87 try:
88 with urllib.request.urlopen(resource) as s:
89 return s.read()
90 except urllib.error.HTTPError:
91 return 'Not Found'
92
93 >>> for n in 8, 290, 308, 320, 8, 218, 320, 279, 289, 320, 9991:
94 ... pep = get_pep(n)
95 ... print(n, len(pep))
96
Raymond Hettinger17328e42013-04-06 20:27:33 -070097 >>> get_pep.cache_info()
98 CacheInfo(hits=3, misses=8, maxsize=32, currsize=8)
Georg Brandl2e7346a2010-07-31 18:09:23 +000099
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000100 Example of efficiently computing
101 `Fibonacci numbers <http://en.wikipedia.org/wiki/Fibonacci_number>`_
102 using a cache to implement a
103 `dynamic programming <http://en.wikipedia.org/wiki/Dynamic_programming>`_
104 technique::
105
106 @lru_cache(maxsize=None)
107 def fib(n):
108 if n < 2:
109 return n
110 return fib(n-1) + fib(n-2)
111
Raymond Hettinger17328e42013-04-06 20:27:33 -0700112 >>> [fib(n) for n in range(16)]
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000113 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
114
Raymond Hettinger17328e42013-04-06 20:27:33 -0700115 >>> fib.cache_info()
Raymond Hettingerc79fb0e2010-12-01 03:45:41 +0000116 CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)
117
Georg Brandl2e7346a2010-07-31 18:09:23 +0000118 .. versionadded:: 3.2
119
Raymond Hettingercd9fdfd2011-10-20 08:57:45 -0700120 .. versionchanged:: 3.3
121 Added the *typed* option.
122
Georg Brandl8a1caa22010-07-29 16:01:11 +0000123.. decorator:: total_ordering
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000124
125 Given a class defining one or more rich comparison ordering methods, this
Benjamin Peterson08bf91c2010-04-11 16:12:57 +0000126 class decorator supplies the rest. This simplifies the effort involved
Raymond Hettingerc50846a2010-04-05 18:56:31 +0000127 in specifying all of the possible rich comparison operations:
128
129 The class must define one of :meth:`__lt__`, :meth:`__le__`,
130 :meth:`__gt__`, or :meth:`__ge__`.
131 In addition, the class should supply an :meth:`__eq__` method.
132
133 For example::
134
135 @total_ordering
136 class Student:
137 def __eq__(self, other):
138 return ((self.lastname.lower(), self.firstname.lower()) ==
139 (other.lastname.lower(), other.firstname.lower()))
140 def __lt__(self, other):
141 return ((self.lastname.lower(), self.firstname.lower()) <
142 (other.lastname.lower(), other.firstname.lower()))
143
144 .. versionadded:: 3.2
145
Georg Brandl67b21b72010-08-17 15:07:14 +0000146
Georg Brandl036490d2009-05-17 13:00:36 +0000147.. function:: partial(func, *args, **keywords)
Georg Brandl116aa622007-08-15 14:28:22 +0000148
149 Return a new :class:`partial` object which when called will behave like *func*
150 called with the positional arguments *args* and keyword arguments *keywords*. If
151 more arguments are supplied to the call, they are appended to *args*. If
152 additional keyword arguments are supplied, they extend and override *keywords*.
153 Roughly equivalent to::
154
155 def partial(func, *args, **keywords):
156 def newfunc(*fargs, **fkeywords):
157 newkeywords = keywords.copy()
158 newkeywords.update(fkeywords)
159 return func(*(args + fargs), **newkeywords)
160 newfunc.func = func
161 newfunc.args = args
162 newfunc.keywords = keywords
163 return newfunc
164
165 The :func:`partial` is used for partial function application which "freezes"
166 some portion of a function's arguments and/or keywords resulting in a new object
167 with a simplified signature. For example, :func:`partial` can be used to create
168 a callable that behaves like the :func:`int` function where the *base* argument
Christian Heimesfe337bf2008-03-23 21:54:12 +0000169 defaults to two:
Georg Brandl116aa622007-08-15 14:28:22 +0000170
Christian Heimesfe337bf2008-03-23 21:54:12 +0000171 >>> from functools import partial
Georg Brandl116aa622007-08-15 14:28:22 +0000172 >>> basetwo = partial(int, base=2)
173 >>> basetwo.__doc__ = 'Convert base 2 string to an int.'
174 >>> basetwo('10010')
175 18
176
177
Georg Brandl58f9e4f2008-04-19 22:18:33 +0000178.. function:: reduce(function, iterable[, initializer])
Georg Brandl116aa622007-08-15 14:28:22 +0000179
180 Apply *function* of two arguments cumulatively to the items of *sequence*, from
181 left to right, so as to reduce the sequence to a single value. For example,
182 ``reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])`` calculates ``((((1+2)+3)+4)+5)``.
183 The left argument, *x*, is the accumulated value and the right argument, *y*, is
184 the update value from the *sequence*. If the optional *initializer* is present,
185 it is placed before the items of the sequence in the calculation, and serves as
186 a default when the sequence is empty. If *initializer* is not given and
187 *sequence* contains only one item, the first item is returned.
188
189
Łukasz Langa6f692512013-06-05 12:20:24 +0200190.. decorator:: singledispatch(default)
191
Łukasz Langafdcf2b72013-06-07 22:54:03 +0200192 Transforms a function into a :term:`single-dispatch <single
193 dispatch>` :term:`generic function`.
Łukasz Langa6f692512013-06-05 12:20:24 +0200194
195 To define a generic function, decorate it with the ``@singledispatch``
196 decorator. Note that the dispatch happens on the type of the first argument,
197 create your function accordingly::
198
199 >>> from functools import singledispatch
200 >>> @singledispatch
201 ... def fun(arg, verbose=False):
202 ... if verbose:
203 ... print("Let me just say,", end=" ")
204 ... print(arg)
205
206 To add overloaded implementations to the function, use the :func:`register`
207 attribute of the generic function. It is a decorator, taking a type
208 parameter and decorating a function implementing the operation for that
209 type::
210
211 >>> @fun.register(int)
212 ... def _(arg, verbose=False):
213 ... if verbose:
214 ... print("Strength in numbers, eh?", end=" ")
215 ... print(arg)
216 ...
217 >>> @fun.register(list)
218 ... def _(arg, verbose=False):
219 ... if verbose:
220 ... print("Enumerate this:")
221 ... for i, elem in enumerate(arg):
222 ... print(i, elem)
223
224 To enable registering lambdas and pre-existing functions, the
225 :func:`register` attribute can be used in a functional form::
226
227 >>> def nothing(arg, verbose=False):
228 ... print("Nothing.")
229 ...
230 >>> fun.register(type(None), nothing)
231
232 The :func:`register` attribute returns the undecorated function which
233 enables decorator stacking, pickling, as well as creating unit tests for
234 each variant independently::
235
236 >>> @fun.register(float)
237 ... @fun.register(Decimal)
238 ... def fun_num(arg, verbose=False):
239 ... if verbose:
240 ... print("Half of your number:", end=" ")
241 ... print(arg / 2)
242 ...
243 >>> fun_num is fun
244 False
245
246 When called, the generic function dispatches on the type of the first
247 argument::
248
249 >>> fun("Hello, world.")
250 Hello, world.
251 >>> fun("test.", verbose=True)
252 Let me just say, test.
253 >>> fun(42, verbose=True)
254 Strength in numbers, eh? 42
255 >>> fun(['spam', 'spam', 'eggs', 'spam'], verbose=True)
256 Enumerate this:
257 0 spam
258 1 spam
259 2 eggs
260 3 spam
261 >>> fun(None)
262 Nothing.
263 >>> fun(1.23)
264 0.615
265
266 Where there is no registered implementation for a specific type, its
267 method resolution order is used to find a more generic implementation.
268 The original function decorated with ``@singledispatch`` is registered
269 for the base ``object`` type, which means it is used if no better
270 implementation is found.
271
272 To check which implementation will the generic function choose for
273 a given type, use the ``dispatch()`` attribute::
274
275 >>> fun.dispatch(float)
276 <function fun_num at 0x1035a2840>
277 >>> fun.dispatch(dict) # note: default implementation
278 <function fun at 0x103fe0000>
279
280 To access all registered implementations, use the read-only ``registry``
281 attribute::
282
283 >>> fun.registry.keys()
284 dict_keys([<class 'NoneType'>, <class 'int'>, <class 'object'>,
285 <class 'decimal.Decimal'>, <class 'list'>,
286 <class 'float'>])
287 >>> fun.registry[float]
288 <function fun_num at 0x1035a2840>
289 >>> fun.registry[object]
290 <function fun at 0x103fe0000>
291
292 .. versionadded:: 3.4
293
294
Georg Brandl036490d2009-05-17 13:00:36 +0000295.. function:: update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Georg Brandl116aa622007-08-15 14:28:22 +0000296
297 Update a *wrapper* function to look like the *wrapped* function. The optional
298 arguments are tuples to specify which attributes of the original function are
299 assigned directly to the matching attributes on the wrapper function and which
300 attributes of the wrapper function are updated with the corresponding attributes
301 from the original function. The default values for these arguments are the
302 module level constants *WRAPPER_ASSIGNMENTS* (which assigns to the wrapper
Antoine Pitrou560f7642010-08-04 18:28:02 +0000303 function's *__name__*, *__module__*, *__annotations__* and *__doc__*, the
304 documentation string) and *WRAPPER_UPDATES* (which updates the wrapper
305 function's *__dict__*, i.e. the instance dictionary).
Georg Brandl116aa622007-08-15 14:28:22 +0000306
Nick Coghlan98876832010-08-17 06:17:18 +0000307 To allow access to the original function for introspection and other purposes
308 (e.g. bypassing a caching decorator such as :func:`lru_cache`), this function
Éric Araujoc6ecb012010-11-06 06:33:03 +0000309 automatically adds a __wrapped__ attribute to the wrapper that refers to
Nick Coghlan98876832010-08-17 06:17:18 +0000310 the original function.
311
Christian Heimesd8654cf2007-12-02 15:22:16 +0000312 The main intended use for this function is in :term:`decorator` functions which
313 wrap the decorated function and return the wrapper. If the wrapper function is
314 not updated, the metadata of the returned function will reflect the wrapper
Georg Brandl116aa622007-08-15 14:28:22 +0000315 definition rather than the original function definition, which is typically less
316 than helpful.
317
Nick Coghlan98876832010-08-17 06:17:18 +0000318 :func:`update_wrapper` may be used with callables other than functions. Any
319 attributes named in *assigned* or *updated* that are missing from the object
320 being wrapped are ignored (i.e. this function will not attempt to set them
321 on the wrapper function). :exc:`AttributeError` is still raised if the
322 wrapper function itself is missing any attributes named in *updated*.
323
324 .. versionadded:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000325 Automatic addition of the ``__wrapped__`` attribute.
Nick Coghlan98876832010-08-17 06:17:18 +0000326
327 .. versionadded:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000328 Copying of the ``__annotations__`` attribute by default.
Nick Coghlan98876832010-08-17 06:17:18 +0000329
330 .. versionchanged:: 3.2
Georg Brandl9e257012010-08-17 14:11:59 +0000331 Missing attributes no longer trigger an :exc:`AttributeError`.
332
Georg Brandl116aa622007-08-15 14:28:22 +0000333
Georg Brandl8a1caa22010-07-29 16:01:11 +0000334.. decorator:: wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Georg Brandl116aa622007-08-15 14:28:22 +0000335
336 This is a convenience function for invoking ``partial(update_wrapper,
337 wrapped=wrapped, assigned=assigned, updated=updated)`` as a function decorator
Christian Heimesfe337bf2008-03-23 21:54:12 +0000338 when defining a wrapper function. For example:
Georg Brandl116aa622007-08-15 14:28:22 +0000339
Christian Heimesfe337bf2008-03-23 21:54:12 +0000340 >>> from functools import wraps
Georg Brandl116aa622007-08-15 14:28:22 +0000341 >>> def my_decorator(f):
342 ... @wraps(f)
343 ... def wrapper(*args, **kwds):
Georg Brandl6911e3c2007-09-04 07:15:32 +0000344 ... print('Calling decorated function')
Georg Brandl116aa622007-08-15 14:28:22 +0000345 ... return f(*args, **kwds)
346 ... return wrapper
347 ...
348 >>> @my_decorator
349 ... def example():
350 ... """Docstring"""
Georg Brandl6911e3c2007-09-04 07:15:32 +0000351 ... print('Called example function')
Georg Brandl116aa622007-08-15 14:28:22 +0000352 ...
353 >>> example()
354 Calling decorated function
355 Called example function
356 >>> example.__name__
357 'example'
358 >>> example.__doc__
359 'Docstring'
360
361 Without the use of this decorator factory, the name of the example function
362 would have been ``'wrapper'``, and the docstring of the original :func:`example`
363 would have been lost.
364
365
366.. _partial-objects:
367
368:class:`partial` Objects
369------------------------
370
371:class:`partial` objects are callable objects created by :func:`partial`. They
372have three read-only attributes:
373
374
375.. attribute:: partial.func
376
377 A callable object or function. Calls to the :class:`partial` object will be
378 forwarded to :attr:`func` with new arguments and keywords.
379
380
381.. attribute:: partial.args
382
383 The leftmost positional arguments that will be prepended to the positional
384 arguments provided to a :class:`partial` object call.
385
386
387.. attribute:: partial.keywords
388
389 The keyword arguments that will be supplied when the :class:`partial` object is
390 called.
391
392:class:`partial` objects are like :class:`function` objects in that they are
393callable, weak referencable, and can have attributes. There are some important
394differences. For instance, the :attr:`__name__` and :attr:`__doc__` attributes
395are not created automatically. Also, :class:`partial` objects defined in
396classes behave like static methods and do not transform into bound methods
397during instance attribute look-up.
398