blob: 654a5b1428d6991df63539304de5744880e3cfde [file] [log] [blame]
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001\section{\module{functools} ---
Raymond Hettinger9c323f82005-02-28 19:39:44 +00002 Higher order functions and operations on callable objects.}
3
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00004\declaremodule{standard}{functools} % standard library, in Python
Raymond Hettinger9c323f82005-02-28 19:39:44 +00005
6\moduleauthor{Peter Harris}{scav@blueyonder.co.uk}
7\moduleauthor{Raymond Hettinger}{python@rcn.com}
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00008\moduleauthor{Nick Coghlan}{ncoghlan@gmail.com}
Raymond Hettinger9c323f82005-02-28 19:39:44 +00009\sectionauthor{Peter Harris}{scav@blueyonder.co.uk}
10
11\modulesynopsis{Higher-order functions and operations on callable objects.}
12
Raymond Hettinger6a458e92005-03-02 15:10:38 +000013\versionadded{2.5}
Raymond Hettinger9c323f82005-02-28 19:39:44 +000014
Thomas Wouters4d70c3d2006-06-08 14:42:34 +000015The \module{functools} module is for higher-order functions: functions
Raymond Hettinger9c323f82005-02-28 19:39:44 +000016that act on or return other functions. In general, any callable object can
17be treated as a function for the purposes of this module.
18
19
Thomas Wouters4d70c3d2006-06-08 14:42:34 +000020The \module{functools} module defines the following function:
Raymond Hettinger9c323f82005-02-28 19:39:44 +000021
22\begin{funcdesc}{partial}{func\optional{,*args}\optional{, **keywords}}
23Return a new \class{partial} object which when called will behave like
24\var{func} called with the positional arguments \var{args} and keyword
25arguments \var{keywords}. If more arguments are supplied to the call, they
26are appended to \var{args}. If additional keyword arguments are supplied,
27they extend and override \var{keywords}. Roughly equivalent to:
28 \begin{verbatim}
29 def partial(func, *args, **keywords):
30 def newfunc(*fargs, **fkeywords):
31 newkeywords = keywords.copy()
32 newkeywords.update(fkeywords)
33 return func(*(args + fargs), **newkeywords)
34 newfunc.func = func
35 newfunc.args = args
36 newfunc.keywords = keywords
37 return newfunc
38 \end{verbatim}
39
40The \function{partial} is used for partial function application which
41``freezes'' some portion of a function's arguments and/or keywords
Walter Dörwald769f8212005-04-14 20:08:59 +000042resulting in a new object with a simplified signature. For example,
Raymond Hettinger9c323f82005-02-28 19:39:44 +000043\function{partial} can be used to create a callable that behaves like
44the \function{int} function where the \var{base} argument defaults to
45two:
46 \begin{verbatim}
47 >>> basetwo = partial(int, base=2)
Armin Rigo5ed262b2005-12-06 18:32:37 +000048 >>> basetwo.__doc__ = 'Convert base 2 string to an int.'
Raymond Hettinger9c323f82005-02-28 19:39:44 +000049 >>> basetwo('10010')
50 18
51 \end{verbatim}
52\end{funcdesc}
53
Guido van Rossum0919a1a2006-08-26 20:49:04 +000054\begin{funcdesc}{reduce}{function, sequence\optional{, initializer}}
55 Apply \var{function} of two arguments cumulatively to the items of
56 \var{sequence}, from left to right, so as to reduce the sequence to
57 a single value. For example, \code{reduce(lambda x, y: x+y, [1, 2,
58 3, 4, 5])} calculates \code{((((1+2)+3)+4)+5)}. The left argument,
59 \var{x}, is the accumulated value and the right argument, \var{y},
60 is the update value from the \var{sequence}. If the optional
61 \var{initializer} is present, it is placed before the items of the
62 sequence in the calculation, and serves as a default when the
63 sequence is empty. If \var{initializer} is not given and
64 \var{sequence} contains only one item, the first item is returned.
65\end{funcdesc}
66
Thomas Wouters73e5a5b2006-06-08 15:35:45 +000067\begin{funcdesc}{update_wrapper}
68{wrapper, wrapped\optional{, assigned}\optional{, updated}}
Thomas Wouterscf297e42007-02-23 15:07:44 +000069Update a \var{wrapper} function to look like the \var{wrapped} function.
70The optional arguments are tuples to specify which attributes of the original
Thomas Wouters73e5a5b2006-06-08 15:35:45 +000071function are assigned directly to the matching attributes on the wrapper
72function and which attributes of the wrapper function are updated with
73the corresponding attributes from the original function. The default
74values for these arguments are the module level constants
Thomas Wouterscf297e42007-02-23 15:07:44 +000075\var{WRAPPER_ASSIGNMENTS} (which assigns to the wrapper function's
76\var{__name__}, \var{__module__} and \var{__doc__}, the documentation string)
77and \var{WRAPPER_UPDATES} (which updates the wrapper function's \var{__dict__},
78i.e. the instance dictionary).
Thomas Wouters73e5a5b2006-06-08 15:35:45 +000079
80The main intended use for this function is in decorator functions
81which wrap the decorated function and return the wrapper. If the
82wrapper function is not updated, the metadata of the returned function
83will reflect the wrapper definition rather than the original function
84definition, which is typically less than helpful.
85\end{funcdesc}
86
87\begin{funcdesc}{wraps}
88{wrapped\optional{, assigned}\optional{, updated}}
89This is a convenience function for invoking
90\code{partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)}
91as a function decorator when defining a wrapper function. For example:
92 \begin{verbatim}
93 >>> def my_decorator(f):
94 ... @wraps(f)
95 ... def wrapper(*args, **kwds):
96 ... print 'Calling decorated function'
97 ... return f(*args, **kwds)
98 ... return wrapper
99 ...
100 >>> @my_decorator
101 ... def example():
Thomas Wouterscf297e42007-02-23 15:07:44 +0000102 ... """Docstring"""
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000103 ... print 'Called example function'
104 ...
105 >>> example()
106 Calling decorated function
107 Called example function
108 >>> example.__name__
109 'example'
Thomas Wouterscf297e42007-02-23 15:07:44 +0000110 >>> example.__doc__
111 'Docstring'
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000112 \end{verbatim}
113Without the use of this decorator factory, the name of the example
Thomas Wouterscf297e42007-02-23 15:07:44 +0000114function would have been \code{'wrapper'}, and the docstring of the
115original \function{example()} would have been lost.
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000116\end{funcdesc}
Raymond Hettinger9c323f82005-02-28 19:39:44 +0000117
118
119\subsection{\class{partial} Objects \label{partial-objects}}
120
121
122\class{partial} objects are callable objects created by \function{partial()}.
123They have three read-only attributes:
124
125\begin{memberdesc}[callable]{func}{}
126A callable object or function. Calls to the \class{partial} object will
127be forwarded to \member{func} with new arguments and keywords.
128\end{memberdesc}
129
130\begin{memberdesc}[tuple]{args}{}
131The leftmost positional arguments that will be prepended to the
132positional arguments provided to a \class{partial} object call.
133\end{memberdesc}
134
135\begin{memberdesc}[dict]{keywords}{}
136The keyword arguments that will be supplied when the \class{partial} object
137is called.
138\end{memberdesc}
Raymond Hettinger3e1dd3b2005-03-08 07:15:36 +0000139
140\class{partial} objects are like \class{function} objects in that they are
141callable, weak referencable, and can have attributes. There are some
142important differences. For instance, the \member{__name__} and
143\member{__doc__} attributes are not created automatically. Also,
144\class{partial} objects defined in classes behave like static methods and
145do not transform into bound methods during instance attribute look-up.