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

2017年11月22日 05:42:07 -0800

On 2017年11月22日 15:03:09 +0200
Serhiy Storchaka <[email protected]> wrote:
> From 
> https://stackoverflow.com/questions/45190729/differences-between-generator-comprehension-expressions.
> 
> g = [(yield i) for i in range(3)]
> 
> Syntactically this looks like a list comprehension, and g should be a 
> list, right? But actually it is a generator. This code is equivalent to 
> the following code:
> 
> def _make_list(it):
> result = []
> for i in it:
> result.append(yield i)
> return result
> g = _make_list(iter(range(3)))
> 
> Due to "yield" in the expression _make_list() is not a function 
> returning a list, but a generator function returning a generator.
> 
> This change in semantic looks unintentional to me. It looks like leaking 
> an implementation detail.
Perhaps we can deprecate the use of "yield" in comprehensions and make
it a syntax error in a couple versions?
I don't see a reason for writing such code rather than the more
explicit variants. It looks really obscure, regardless of the actual
semantics.
Regards
Antoine.
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to