Chris Rebert <c...@rebertia.com> wrote:

> Essentially, file iterators are dumb and don't keep track of where in
> the file the next line starts, instead relying on their associated
> file object to keep track of the current position in the file; the
> iterator's state is little more than a reference to its associated
> file object. When asked for the "next" line, a file iterator just
> reads forward to the next newline from the file object's current
> position, changing the current position as tracked by the file object
> as a side-effect. Thus, using multiple iterators to the same file
> object can have the results you're seeing when these side-effects
> interact.

Nothing 'dumb' or 'smart' about it: it is simply that a file object is 
already an iterator. Trying to create an iterator from an existing iterator 
in Python never duplicates the iterator.

>>> f = open('somefile')
>>> iter(f) is f
True


-- 
Duncan Booth http://kupuguy.blogspot.com
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to