summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew M. Kuchling <amk@amk.ca>2006-11-08 14:30:14 (GMT)
committerAndrew M. Kuchling <amk@amk.ca>2006-11-08 14:30:14 (GMT)
commit394ae90db3e4dc996e86730099d2df3e0e028495 (patch)
tree912fefd87d7735ec9a08088d722bfabf9f76fde6
parent0acdb930e4f3b30c80560d5b8623940bc0749877 (diff)
downloadcpython-394ae90db3e4dc996e86730099d2df3e0e028495.zip
cpython-394ae90db3e4dc996e86730099d2df3e0e028495.tar.gz
cpython-394ae90db3e4dc996e86730099d2df3e0e028495.tar.bz2
More edits
-rw-r--r--Doc/howto/functional.rst36
1 files changed, 26 insertions, 10 deletions
diff --git a/Doc/howto/functional.rst b/Doc/howto/functional.rst
index 341c041..2e5a6a9 100644
--- a/Doc/howto/functional.rst
+++ b/Doc/howto/functional.rst
@@ -900,6 +900,16 @@ The ``itertools`` module contains a number of commonly-used iterators
as well as functions for combining several iterators. This section
will introduce the module's contents by showing small examples.
+The module's functions fall into a few broad classes:
+
+* Functions that create a new iterator based on an existing iterator.
+* Functions for treating an iterator's elements as function arguments.
+* Functions for selecting portions of an iterator's output.
+* A function for grouping an iterator's output.
+
+Creating new iterators
+''''''''''''''''''''''
+
``itertools.count(n)`` returns an infinite stream of
integers, increasing by 1 each time. You can optionally supply the
starting number, which defaults to 0::
@@ -1000,6 +1010,9 @@ and one of the new iterators is consumed more than the others.
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...
+Calling functions on elements
+'''''''''''''''''''''''''''''
+
Two functions are used for calling other functions on the contents of an
iterable.
@@ -1028,6 +1041,10 @@ arguments::
=>
/usr/bin/java, /bin/python, /usr/bin/perl, /usr/bin/ruby
+
+Selecting elements
+''''''''''''''''''
+
Another group of functions chooses a subset of an iterator's elements
based on a predicate.
@@ -1074,6 +1091,9 @@ results.
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...
+Grouping elements
+'''''''''''''''''
+
The last function I'll discuss, ``itertools.groupby(iter,
key_func=None)``, is the most complicated. ``key_func(elem)`` is a
function that can compute a key value for each element returned by the
@@ -1119,15 +1139,16 @@ The functools module
----------------------------------------------
The ``functools`` module in Python 2.5 contains some higher-order
-functions. A **higher-order function** takes functions as input and
-returns new functions. The most useful tool in this module is the
-``partial()`` function.
+functions. A **higher-order function** takes one or more functions as
+input and returns a new function. The most useful tool in this module
+is the ``partial()`` function.
For programs written in a functional style, you'll sometimes want to
construct variants of existing functions that have some of the
parameters filled in. Consider a Python function ``f(a, b, c)``; you
-may wish to create a new function ``g(b, c)`` that was equivalent to
-``f(1, b, c)``. This is called "partial function application".
+may wish to create a new function ``g(b, c)`` that's equivalent to
+``f(1, b, c)``; you're filling in a value for one of ``f()``'s parameters.
+This is called "partial function application".
The constructor for ``partial`` takes the arguments ``(function, arg1,
arg2, ... kwarg1=value1, kwarg2=value2)``. The resulting object is
@@ -1146,11 +1167,6 @@ Here's a small but realistic example::
server_log = functools.partial(log, subsystem='server')
server_log('Unable to open socket')
-There are also third-party modules, such as Collin Winter's
-`functional package <http://cheeseshop.python.org/pypi/functional>`__,
-that are intended for use in functional-style programs. See below
-for a section describing the ``functional`` mdoule.
-
The operator module
-------------------