[Python-ideas] relaxing keyword usage restrictions
Jacob Holm
jh at improva.dk
Fri Sep 9 20:21:23 CEST 2011
On 2011-09-09 19:31, Georg Brandl wrote:
> Am 09.09.2011 09:48, schrieb Terry Reedy:
>> On 9/9/2011 2:04 AM, H Krishnan wrote:
>>>
[snip]
>>
>> Funny you should choose that example. With a slight change
>> myreturn = yield - principal
>> it is legal syntax today with 'yield' interpreted as a keyword. So it
>> cannot be interpreted as an identifier without making Python grammar
>> ambiguous and unparseable with its current parser.
>
> Actually, it isn't: "yield" expressions, like generator expressions, need
> to be inside parentheses. (A rule that's an ambiguousness restriction and
> a nice readability helper.)
Actually it is, at least in 3.1 (I don't have a more recent version to
test on ATM). It is the same as
myreturn = yield (-principal)
It computes and yields the value (-principal). When resumed by a "send"
on the generator the argument is assigned to myreturn. If resumed by
"next" instead, this is treated as send(None).
I agree that this is confusing. In spite of all my work hashing out the
details of PEP 380, I still initially thought it would work like
myreturn = (yield) - principal
probably because of the context where "yield" was supposed to be a
regular variable name. (An idea I'm -1 on, btw).
Based on this, I would support a change to outlaw
myreturn = yield - principal
forcing you to add the parentheses to clearly show which interpretation
is intended.
However, I would still want to keep the statement form
yield -principal
legal, so I am not sure if that proposal has a chance to fly.
- Jacob
More information about the Python-ideas
mailing list