a = b = 1 just syntactic sugar?
Martin v. Löwis
martin at v.loewis.de
Mon Jun 9 01:14:31 CEST 2003
Ed Avis <ed at membled.com> writes:
> >That doesn't answer my question. What would be the output of this
> It is syntactically ambiguous because of the two print statements both
> accepting commas.
This still doesn't answer my question "What would be the output?",
since you say how you interpret the imagined output, but you don't say
what output you imagine.
I assume you want it to cause a SyntaxError.
Then the question is what algorithm exactly do you apply to detect an
> >>Is it a rule of Python's grammar that no construct should ever require
> >>parenthesizing just to stop it being ambiguous?
> >No, there is no such rule.
> So there is no reason to reject out of hand allowing one-line
> statements in lambda just because such constructs may require
> parenthesizing when used inside larger statements like 'print'.
No, it is rejected because nobody has made a specification, yet, as to
how exactly it should work. Only if a precise, detailed, complete, and
implementable specification is made, it can be studied for undesired
effects, and possibly be rejected.
Actually, it doesn't need to be implementable - then we could reject
it for not being implementable.
> There may be other grammatical reasons of course.
Most likely. Without a precise, detailed, complete and implementable
spec, it is hard to tell what these reasons are.
> Elsewhere in this thread I have mentioned
> lambda_form ::=
> "lambda" [parameter_list]: simple_stmt
> which seems to match the specification of 'any statement that can fit
> on one line' (which itself seems pretty exact to me).
Elsewhere in the thread I have said that this interpretation is
incorrect: a simple_stmt always ends with a NEWLINE, something which
you apparently don't want.
> >Then, if you have completed the specification, the problem likely is
> >that your proposed grammar is either counter-intuitive, or
> >unimplementable (depending on your specification).
> Let's see which it is.
It's counter-intuitive that
x = (lambda s: print s)
is incorrect. Under your proposal, it would be incorrect, and you
would have to write
x = (lambda s: print s
to insert the necessary NEWLINE.
More information about the Python-list