More edits

This commit is contained in:
Andrew M. Kuchling 2006-11-08 14:30:14 +00:00
parent 0acdb930e4
commit 394ae90db3
1 changed files with 26 additions and 10 deletions

View File

@ -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
-------------------