On Thu, Oct 13, 2016 at 10:40:19PM +0200, Sjoerd Job Postmus wrote: > Likewise, > > l = [f(t) for t in iterable] > > can be seen as sugar for > > def gen(): > for t in iterable: > yield f(t) > l = list(gen())
But that is *not* how list comprehensions are treated today. Perhaps they should be? https://docs.python.org/3.6/reference/expressions.html#displays-for-lists-sets-and-dictionaries (Aside: earlier I contrasted "list display" from "list comprehension". In fact according to the docs, a comprehension is a kind of display, a special case of display. Nevertheless, my major point still holds: a list display like [1, 2, 3] is not the same as a list comprehension like [a+1 for a in (0, 1, 2)].) There may be some conceptual benefits to switching to a model where list/set/dict displays are treated as list(gen_expr) etc. But that still leaves the question of what "yield *t" is supposed to mean? Consider the analogy with f(*t), where t = (a, b, c). We *don't* have: f(*t) is equivalent to f(a); f(b); f(c) So why would yield *t give us this? yield a; yield b; yield c By analogy with the function call syntax, it should mean: yield (a, b, c) That is, t is unpacked, then repacked to a tuple, then yielded. > Now the suggested spelling > > l = [*f(t) for t in iterable] > > is very confusing, from what I understand: what does the `*` even mean > here. Indeed. The reader may be forgiven for thinking that this is yet another unrelated and arbitrary use of * to join the many other uses: - mathematical operator; - glob and regex wild-card; - unpacking; - import all - and now yield from > However, consider the following spelling: > > l = [from f(t) for t in iterable] > > To me, it does not seem far-fetched that this would mean: > > def gen(): > for t in iterable: > yield from f(t) > l = list(gen()) Now we're starting to move towards a reasonable proposal. It still requires a conceptual shift in how list comprehensions are documented, but at least now the syntax is no longer so arbitrary. -- Steve _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/