[Python-Dev] Call for prudence about PEP-572

Eric V. Smith eric at trueblade.com
Sun Jul 8 14:20:54 EDT 2018


On 7/8/2018 1:59 PM, Chris Angelico wrote:
> On Mon, Jul 9, 2018 at 3:55 AM, Eric V. Smith <eric at trueblade.com> wrote:
>> I agree with Chris in this case. That said, there is at least one place
>> where the grammar does forbid you from doing something that would otherwise
>> make be allowable: decorators.
>>
>>>>> @lookup[0]
>>    File "<stdin>", line 1
>>      @lookup[0]
>>             ^
>> SyntaxError: invalid syntax
>>
>> But this works:
>>
>>>>> new_decorator = lookup[0]
>>>>> @new_decorator
>> ... def f(): pass
>>
>> Thus, the idea of restricting the type of expression that can be used in
>> particular circumstances is not without precedent, and should not be
>> dismissed at face value. That is, unless we want to remove the restriction
>> on decorators, which I'm okay with, too. I have occasionally wanted to do
>> something more complicated with a decorator, and used the workaround above.
>>
> 
> This is true. I wasn't around when decorator syntax was discussed;
> what were the reasons for this being the way it is? It isn't simply
> "'@' test".

I was around, but I don't recall the exact reasoning. Something along 
the lines of YAGNI, I believe.

The first reference I found to it is 
https://mail.python.org/pipermail/python-ideas/2009-September/005623.html, 
although surely there are older ones, and even this email references an 
older super-confusing use of lambdas in decorators.

In any event, I see no reason to restrict where assignment expressions 
can be used.

Eric



More information about the Python-Dev mailing list