[Python-ideas] Suggested MapView object (Re: __len__() for map())

Terry Reedy tjreedy at udel.edu
Tue Dec 11 22:36:24 EST 2018


On 12/11/2018 6:50 PM, Greg Ewing wrote:

> I'm not necessarily saying this *should* be done, just pointing
> out that it's a possible strategy for migrating map() from
> an iterator to a view, if we want to do that.

Python has list and list_iterator, tuple and tuple_iterator, set and 
set_iterator, dict and dict_iterator, range and range_iterator.

In 3.0, we could have turned map into a finite sequence analogous to 
range, and add a new map_iterator.  To be completely lazy, such a map 
would have to restrict input to Sequences.  To be compatible with 2.0 
map, it would have to use list(iterable) to turn other finite iterables 
into concrete lists, making it only semi-lazy. Since I am too lazy to 
write the multi-iterable version, here is the one-iterable version to 
show the idea.

     def __init__(func, iterable):
         self.func = func
         self.seq = iterable if isinstance(iterable, Sequence) else 
list(iterable)

Given the apparent little need for the extra complication, and the 
possibility of keeping a reference to sequences and explicitly applying 
list otherwise, it was decided to rebind 'map' to the fully lazy and 
general itertools.map.

-- 
Terry Jan Reedy



More information about the Python-ideas mailing list