[Python-Dev] Tricky way of of creating a generator via a comprehension expression
Serhiy Storchaka
storchaka at gmail.com
Wed Nov 22 08:03:09 EST 2017
More information about the Python-Dev mailing list
Wed Nov 22 08:03:09 EST 2017
- Previous message (by thread): [Python-Dev] Script bootstrapping executables on Windows
- Next message (by thread): [Python-Dev] Tricky way of of creating a generator via a comprehension expression
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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. If a list comprehension would be implemented not via creating and calling an intermediate function, but via an inlined loop (like in Python 2) this would be a syntax error if used outside of a function or would make an outer function a generator function. __result = [] __i = None try: for __i in range(3): __result.append(yield __i) g = __result finally: del __result, __i I don't see how the current behavior can be useful.
- Previous message (by thread): [Python-Dev] Script bootstrapping executables on Windows
- Next message (by thread): [Python-Dev] Tricky way of of creating a generator via a comprehension expression
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-Dev mailing list