On Mon, Jun 26, 2017 at 4:53 PM, Serhiy Storchaka <storch...@gmail.com> wrote:
> 26.06.17 13:47, Joao S. O. Bueno пише: > >> On 25 June 2017 at 20:55, Danilo J. S. Bellini <danilo.bell...@gmail.com >> <mailto:danilo.bell...@gmail.com>> wrote: >> >> On Sun, Jun 25, 2017 at 3:06 PM, lucas via Python-ideas >> <python-ideas@python.org >> <mailto:python-ideas@python.org>>wrote: >> >> I often use generators, and itertools.chain on them. >> What about providing something like the following: >> >> a = (n for n in range(2)) >> b = (n for n in range(2, 4)) >> tuple(a + b) # -> 0 1 2 3 >> >> >> You know you can do `tuple(*a, *b)` , right? >> >> The problem with the "*" notation is that it will actually render the >> iterable >> contents eagerly - unlike something that would just chain them. >> But for creating tuples, it just works. >> > > Even the tuple constructor is not needed. > > >>> *a, *b > (0, 1, 2, 3) > And you can also do def a_and_b(): yield from a yield from b c = a_and_b() # iterable that yields 0, 1, 2, 3 I sometimes wish there was something like c from: yield from a yield from b ...or to get a list: c as list from: yield from a yield from b ...or a sum: c as sum from: yield from a yield from b These would be great for avoiding crazy oneliner generator expressions. They would also be equivalent to things like: @list @from def c(): yield from a yield from b @sum @from def c(): yield from a yield from b the above, given: def from(genfunc): return genfunc() Except of course `from` is a keyword and it should probably just be `call`. But this still doesn't naturally extend to allow indexing and slicing, like c[2] and c[1:3], for the case where the concatenated iterables are Sequences. -- Koos -- + Koos Zevenhoven + http://twitter.com/k7hoven +
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/