82 lines
3.1 KiB
TeX
82 lines
3.1 KiB
TeX
\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.
|