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
