[Python-Dev] Iterators, map, xreadlines and docs
Tim Peters
tim.one@home.com
Sat, 28 Apr 2001 03:24:48 -0400
A confused user on c.l.py reported that while
for x in file.xreadlines():
works fine,
map(whatever, file.xreadlines())
blows up with
TypeError: argument 2 to map() must be a sequence object
The docs say both contexts require "a sequence", so this is baffling to them.
It's apparently because map() internally insists that the sq_length slot be
non-null (but it's null in the xreadlines object), despite that map() doesn't
use it for anything other than *guessing* a result size (it keeps going until
IndexError is raised regardless of what len() returns, growing or shrinking
the preallocated result list as needed).
I think that's a bug in map(). Anyone disagree?
If so, fine, map() has to be changed to work with iterators anyway <wink>.
How are we going to identify all the places that need to become
iterator-aware, get all the code changed, and update the docs to match? In
effect, a bunch of docs for arguments need to say, in some words or other,
that the args must implement the iterator interface or protocol. I think
it's essential that we define the latter only once. But the docs don't
really define any interfaces/protocols now, so it's unclear where to put
that.
Fred, Pronounce. Better sooner than later, else I bet a bunch of code
changes will get checked in without appropriate doc changes, and the 2.2 docs
won't match the code.