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.
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