blob: 9218454fe3e43e1b50c0a064565ddaa76d19f267 [file] [log] [blame]
\section{\module{functional} ---
Higher order functions and operations on callable objects.}
\declaremodule{standard}{functional} % standard library, in Python
\moduleauthor{Peter Harris}{scav@blueyonder.co.uk}
\moduleauthor{Raymond Hettinger}{python@rcn.com}
\sectionauthor{Peter Harris}{scav@blueyonder.co.uk}
\modulesynopsis{Higher-order functions and operations on callable objects.}
\versionadded{2.5}
The \module{functional} module is for higher-order functions: functions
that act on or return other functions. In general, any callable object can
be treated as a function for the purposes of this module.
The \module{functional} module defines the following function:
\begin{funcdesc}{partial}{func\optional{,*args}\optional{, **keywords}}
Return a new \class{partial} object which when called will behave like
\var{func} called with the positional arguments \var{args} and keyword
arguments \var{keywords}. If more arguments are supplied to the call, they
are appended to \var{args}. If additional keyword arguments are supplied,
they extend and override \var{keywords}. Roughly equivalent to:
\begin{verbatim}
def partial(func, *args, **keywords):
def newfunc(*fargs, **fkeywords):
newkeywords = keywords.copy()
newkeywords.update(fkeywords)
return func(*(args + fargs), **newkeywords)
newfunc.func = func
newfunc.args = args
newfunc.keywords = keywords
return newfunc
\end{verbatim}
The \function{partial} is used for partial function application which
``freezes'' some portion of a function's arguments and/or keywords
resulting in a new object with a simplified signature. For example,
\function{partial} can be used to create a callable that behaves like
the \function{int} function where the \var{base} argument defaults to
two:
\begin{verbatim}
>>> basetwo = partial(int, base=2)
>>> basetwo.__doc__ = 'Convert base 2 string to an int.'
>>> basetwo('10010')
18
\end{verbatim}
\end{funcdesc}
\subsection{\class{partial} Objects \label{partial-objects}}
\class{partial} objects are callable objects created by \function{partial()}.
They have three read-only attributes:
\begin{memberdesc}[callable]{func}{}
A callable object or function. Calls to the \class{partial} object will
be forwarded to \member{func} with new arguments and keywords.
\end{memberdesc}
\begin{memberdesc}[tuple]{args}{}
The leftmost positional arguments that will be prepended to the
positional arguments provided to a \class{partial} object call.
\end{memberdesc}
\begin{memberdesc}[dict]{keywords}{}
The keyword arguments that will be supplied when the \class{partial} object
is called.
\end{memberdesc}
\class{partial} objects are like \class{function} objects in that they are
callable, weak referencable, and can have attributes. There are some
important differences. For instance, the \member{__name__} and
\member{__doc__} attributes are not created automatically. Also,
\class{partial} objects defined in classes behave like static methods and
do not transform into bound methods during instance attribute look-up.