A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://mail.python.org/pipermail/python-dev/2017-November/150681.html below:

[Python-Dev] Tricky way of of creating a generator via a comprehension expression

[Python-Dev] Tricky way of of creating a generator via a comprehension expression [Python-Dev] Tricky way of of creating a generator via a comprehension expressionSerhiy Storchaka storchaka at gmail.com
Wed Nov 22 08:53:41 EST 2017
22.11.17 15:25, Ivan Levkivskyi пише:
> I think this is indeed a problem.. For me the biggest surprise was that 
> `yield` inside a comprehension does not turn a surrounding function into 
> comprehension, see also
> https://stackoverflow.com/questions/29334054/why-am-i-getting-different-results-when-using-a-list-comprehension-with-coroutin
> 
> In fact there is a b.p.o. issue for this 
> https://bugs.python.org/issue10544, it is assigned to me since July, but 
> I was focused on other things recently.
> My plan was to restore the Python 2 semantics while still avoiding the 
> leak of comprehension variable to the enclosing scope (the initial 
> reason of introducing auxiliary "_make_list" function IIUC).
> So that:
> 
> 1) g = [(yield i) for i in range(3)] outside a function will be a 
> SyntaxError (yield outside a function)
> 2) g = [(yield i) for i in range(3)] inside a function will turn that 
> enclosing function into generator.
> 3) accessing i after g = [(yield i) for i in range(3)] will give a 
> NameError: name 'i' is not defined
> 
> If you have time to work on this, then I will be glad if you take care 
> of this issue, you can re-assign it.

I have the same plan. I know how implement this for comprehensions, but 
the tricky question is what to do with generator expressions? Ideally

     result = [expr for i in iterable]

and

     result = list(expr for i in iterable)

should have the same semantic. I.e. if expr is "(yield i)", this should 
turn the enclosing function into a generator function, and fill the list 
with values passed to the generator's .send(). I have no idea how 
implement this.

More information about the Python-Dev mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4