On Thu, Apr 12, 2018 at 12:11 AM, Paul Moore <p.f.mo...@gmail.com> wrote: > On 11 April 2018 at 14:54, Chris Angelico <ros...@gmail.com> wrote: >> Sure, if you're just assigning zero to everything. But you could do >> that with a statement. What about this: >> >> q = { >> lambda: x := lambda y: z := a := 0, >> } >> >> Yes, it's an extreme example, but look at all those colons and tell me >> if you can figure out what each one is doing. > > lambda: x := (lambda y: (z := (a := 0))) > > As I say, it's the only *possible* parsing. It's ugly, and it > absolutely should be parenthesised, but there's no need to make the > parentheses mandatory. (And actually, it didn't take me long to add > those parentheses, it's not *hard* to parse correctly - for a human).

Did you pick up on the fact that this was actually in a set? With very small changes, such as misspelling "lambda" at the beginning, this actually becomes a dict display. How much of the expression do you need to see before you can be 100% sure of the parsing? Could you do this if fed tokens one at a time, with permission to look no more than one token ahead? ChrisA _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/