On Thu, Oct 13, 2016 at 11:42 PM Paul Moore <p.f.mo...@gmail.com> wrote:
> I remain puzzled. > > Given the well-documented and understood transformation: > > [fn(x) for x in lst if cond] > > translates to > > result = [] > for x in lst: > if cond: > result.append(fn(x)) > > please can you explain how to modify that translation rule to > incorporate the suggested syntax? > if you allow result.append(1, 2, 3) to mean result.extend([1,2,3]) # which was discussed before result = [] for x in lst: if cond: result.append(*fn(x)) Or simply use result.extend([*fn(x)]) Personally, I'm not even sure any more that I can *describe* the > suggested syntax. Where in [fn(x) for x in lst if cond] is the * > allowed? fn(*x)? *fn(x)? Only as *x with a bare variable, but no > expression? Only in certain restricted types of construct which aren't > expressions but are some variation on an unpacking construct? > > The star is always exactly at the place that should "handle" it. which means [*(fn(x)) for x in lst if cond]. fn(x) must be iterable as always. > We've had a lot of examples. I think it's probably time for someone to > describe the precise syntax (as BNF, like the syntax in the Python > docs at > https://docs.python.org/3.6/reference/expressions.html#displays-for-lists-sets-and-dictionaries > and following sections) and semantics (as an explanation of how to > rewrite any syntactically valid display as a loop). It'll have to be > done in the end, as part of any implementation, so why not now? > > I will be happy to do so, and will be happy to work with anyone else interested. Elazar
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/