[Python-ideas] Generators' and iterators' __add__ method
Terry Reedy
tjreedy at udel.edu
Wed Feb 15 23:39:31 CET 2012
On 2/15/2012 11:20 AM, Yuval Greenfield wrote:
> Wouldn't it be nice to add generators and iterators like we can do with
> lists?
That is simply not possible. list1+list2 is a list; tuple1+tuple2 is a
tuple; list1+tuple2 is an error! What type would iterable1 + iterable 2
be? Answer: a chain object!
> def f():
> yield 1
> yield 2
> yield 3
>
> def g():
> yield 4
> yield 5
>
> # today
> for item in itertools.chain(f(), g()):
> print(item)
The itertools module is the proper place for generic operations on
iterables (and not just iterators!).
>>> import itertools as it
>>> list(it.chain([1,2,3], (4,5.6), range(7,10)))
[1, 2, 3, 4, 5.6, 7, 8, 9]
Chain 'adds' mixed types and is not limited to binary scope.
If we were starting fresh today, we *might* consider making the
functions that went into itertools into methods of an iterable ABC. But
making every function a method is not Python's style. Indeed, exposing
generic methods like __len__ as functions is more common.
--
Terry Jan Reedy
More information about the Python-ideas
mailing list