[Python-Dev] itertools module
Skip Montanaro
skip@pobox.com
Mon, 27 Jan 2003 11:13:38 -0600
>> * imap() - It's not clear to me why it differs from map() other than
>> the fact that it's an iterator.
Raymond> The other differences are that it stops with the shortest
Raymond> iterable and doesn't accept None for a func argument.
I understand that. I was questioning why with a name like "imap" you chose
to make it differ from map() in ways other than its iterator-ness. The
other semantic differences make it more difficult to replace map() with
itertools.imap() than it might be.
Raymond> Because one or more useful inputs are potentially infinite,
Raymond> filling in Nones is less useful than stopping with the shortest
Raymond> iterator.
Yes, but it still seems a gratuitous change from map() to me.
>> * loopzip() - It's not clear why its next() method should return a
>> list instead of a tuple (again, a seemingly needless distiction
>> with its builtin counterpart, zip()).
Raymond> I've wrestled with the one. The short answer is that zip()
Raymond> already does a pretty good job and that the only use for
Raymond> loopzip() is super high speed looping. To that end, reusing a
Raymond> single list instead of allocating and building tuples is *much*
Raymond> faster.
How do you know the caller doesn't squirrel away the list you returned on
the n-th iteration? I don't see how you can safely reuse the same list.
Skip