[Python-Dev] Tricky way of of creating a generator via a comprehension expression
Nathaniel Smith
njs at pobox.com
Sat Nov 25 01:18:42 EST 2017
On Fri, Nov 24, 2017 at 9:39 PM, Nick Coghlan <ncoghlan at gmail.com> wrote:
> On 25 November 2017 at 15:27, Nathaniel Smith <njs at pobox.com> wrote:
>> On Fri, Nov 24, 2017 at 9:04 PM, Nick Coghlan <ncoghlan at gmail.com> wrote:
>>> def example():
>>> comp1 = yield from [(yield x) for x in ('1st', '2nd')]
>>> comp2 = yield from [(yield x) for x in ('3rd', '4th')]
>>> return comp1, comp2
>>
>> Isn't this a really confusing way of writing
>>
>> def example():
>> return [(yield '1st'), (yield '2nd')], [(yield '3rd'), (yield '4th')]
>
> A real use case
Do you have a real use case? This seems incredibly niche...
> wouldn't be iterating over hardcoded tuples in the
> comprehensions, it would be something more like:
>
> def example(iterable1, iterable2):
> comp1 = yield from [(yield x) for x in iterable1]
> comp2 = yield from [(yield x) for x in iterable2]
> return comp1, comp2
I submit that this would still be easier to understand if written out like:
def map_iterable_to_yield_values(iterable):
"Yield the values in iterable, then return a list of the values sent back."
result = []
for obj in iterable:
result.append(yield obj)
return result
def example(iterable1, iterable2):
values1 = yield from map_iterable_to_yield_values(iterable1)
values2 = yield from map_iterable_to_yield_values(iterable2)
return values1, values2
-n
--
Nathaniel J. Smith -- https://vorpus.org
More information about the Python-Dev
mailing list