docs on for-loop with no __iter__?

Andrew Dalke adalke at mindspring.com
Sat Sep 4 17:32:21 EDT 2004


Steven Bethard wrote:
> Presumably there was a reason not to use len() to determine
> the end of the sequence?

Because that allows iteration over things where
you don't yet know the size.  For example, reading
lines from a file.  Here's how it could have been
done using Python 1.x

class FileReader:
   def __init__(self, infile):
     self.infile = infile
     self._n = 0

   def next(self):
     line = self.infile.readline()
     if not line:
         return None
     self._n = self._n + 1
     return line

   def __getitem__(self, i):
     assert i == self._n, "forward iteration only"
     x = self.next()
     if x is None:
         raise IndexError, i
     return x

I used the _n to double check that people don't
think it's a random access container.

Support for Python 2.x iterators was easy,

   def __iter__(self):
     return iter(self.next, None)

				Andrew
				dalke at dalkescientific.com



More information about the Python-list mailing list