[Python-Dev] Tricky way of of creating a generator via a comprehension expression (original) (raw)

Ivan Levkivskyi levkivskyi at gmail.com
Wed Nov 22 16:25:55 EST 2017


22 Лис 2017 22:19 "Ethan Furman" <ethan at stoneleaf.us> пише:

On 11/22/2017 11:01 AM, Ivan Levkivskyi wrote:

I think how to formulate these rules more "precisely" so that they will be

all consistent even if there is a yield inside. The key idea is that neither comprehensions nor generator expressions should create a function scope surrounding the expr in (expr for ind in iterable) and [expr for ind in iterable]. (this still can be some hidden implementation detail)

So as Serhiy proposed in one of his first posts any comprehensions and generator expressions with yield are not valid outside functions. If such comprehension or generator expression is inside a function, then it makes it a generator, and all the yields are yielded from that generator, for example:

Whether it's inside or outside a function should be irrelevant -- a comprehension / generator expression should have no influence on the type of the resulting function (and at least synchronous comprehensions / generator expressions should be able to live outside of a function).

def fun_gen():

return list((yield i) for i in range(3))

The return says it's returning a list, so that's what it should be returning

def f(): yield 1 return list()

Here return also says it should return a list, so this is not an argument. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20171122/35c47ebe/attachment.html>



More information about the Python-Dev mailing list