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

2017年11月22日 09:39:42 -0800

On 11/22/2017 05:03 AM, Serhiy Storchaka 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.
The [] syntax says g should be list. Seems to me we could do either of:
1) raise if the returned object is not a list;
2) wrap a returned object in a list if it isn't one already;
In other words, (2) would make
 g = [(yield i) for i in range(3)]
and
 g = [((yield i) for i in range(3))]
be the same.
I have no idea how either of those solutions would interact with async/await.
--
~Ethan~
_______________________________________________
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