diff options
author | Fred Drake <fdrake@acm.org> | 2001-05-02 20:18:03 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2001-05-02 20:18:03 (GMT) |
commit | 93656e76f9d7f11af13f5dc0ccf7b2051033fa29 (patch) | |
tree | fb560df496b7b67ac890ef5edff233a239a847b9 /Doc/lib | |
parent | 6f15e5796e89163bd9b5be7a3f7334d17f2c50c1 (diff) | |
download | cpython-93656e76f9d7f11af13f5dc0ccf7b2051033fa29.zip cpython-93656e76f9d7f11af13f5dc0ccf7b2051033fa29.tar.gz cpython-93656e76f9d7f11af13f5dc0ccf7b2051033fa29.tar.bz2 |
Added section describing the iterator protocol.
Diffstat (limited to 'Doc/lib')
-rw-r--r-- | Doc/lib/libstdtypes.tex | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Doc/lib/libstdtypes.tex b/Doc/lib/libstdtypes.tex index 2d82c0e..69f10d3 100644 --- a/Doc/lib/libstdtypes.tex +++ b/Doc/lib/libstdtypes.tex @@ -313,6 +313,57 @@ division by \code{pow(2, \var{n})} without overflow check. \end{description} +\subsection{Iterator Types \label{typeiter}} + +\versionadded{2.1} +\index{iterator protocol} +\index{protocol!iterator} +\index{sequence!iteration} +\index{container!iteration over} + +Python supports a concept of iteration over containers. This is +implemented using two distinct methods; these are used to allow +user-defined classes to support iteration. Sequences, described below +in more detail, always support the iteration methods. + +One method needs to be defined for container objects to provide +iteration support: + +\begin{methoddesc}[container]{__iter__}{} + Return an interator object. The object is required to support the + iterator protocol described below. If a container supports + different types of iteration, additional methods can be provided to + specifically request iterators for those iteration types. (An + example of an object supporting multiple forms of iteration would be + a tree structure which supports both breadth-first and depth-first + traversal.) This method corresponds to the \member{tp_iter} slot of + the type structure for Python objects in the Python/C API. +\end{methoddesc} + +The iterator objects themselves are required to support the following +two methods, which together form the \dfn{iterator protocol}: + +\begin{methoddesc}[iterator]{__iter__}{} + Return the iterator object itself. This is required to allow both + containers and iterators to be used with the \keyword{for} and + \keyword{in} statements. This method corresponds to the + \member{tp_iter} slot of the type structure for Python objects in + the Python/C API. +\end{methoddesc} + +\begin{methoddesc}[iteratpr]{next}{} + Return the next item from the container. If there are no further + items, raise the \exception{StopIteration} exception. This method + corresponds to the \member{tp_iternext} slot of the type structure + for Python objects in the Python/C API. +\end{methoddesc} + +Python defines several iterator objects to support iteration over +general and specific sequence types, dictionaries, and other more +specialized forms. The specific types are not important beyond their +implementation of the iterator protocol. + + \subsection{Sequence Types \label{typesseq}} There are six sequence types: strings, Unicode strings, lists, |