[Python-Dev] Decorator syntax

Brett Cannon brett at python.org
Wed Sep 2 22:47:53 CEST 2009


People, please note that the discussion has shifted to python-ideas
and further comments should happen over there. Carl did the right
thing to shift it there, although cross-posting once the conversation
redirection has occurred is not needed.

hoping-google-wave-will-have-a-permanent-redirector-for-conversations-ly yrs,
Brett

On Wed, Sep 2, 2009 at 03:34, Carl
Johnson<cmjohnson.mailinglist at gmail.com> wrote:
> Crossposting to Python-ideas,
>
> I asked for the same change to the grammar a couple months back on
> python-ideas.
>
> See http://mail.python.org/pipermail/python-ideas/2009-February/thread.html#2787
>
> I'm all for it, but you'll have to convince Guido that this won't
> result in confusing to read code. My own examples, unfortunately did
> not advance your cause, as Guido explained, "My brain hurts trying to
> understand all this. I don't think this bodes well as a use case for a
> proposed feature." :-D The trouble is that I was using lambdas upon
> lambdas to do all kinds of Ruby block-esque tricks. OTOH, if you come
> up with some simple, clear use cases though, and I think he might
> still be persuadable to make a simple change to the grammar.
>
>
> — Carl Johnson
>
> Rob Cliffe <rob.cliffe at btinternet.com> wrote:
>
>> Hi All,
>> This is my first post to python-dev so I will briefly introduce myself:  My
>> name is Rob Cliffe and I am a commercial programmer living in London, UK.  I
>> have some 30 years of programming experience but have only been using Python
>> for a couple of years.
>> First I want to say what a fantastic language Python is.  It is THE best
>> language for development in my opinion, and a joy to use.
>>
>> My specific issue:
>> I eventually got my head round decorator syntax and realised that what came
>> after the '@' was (basically) a function that took a function as argument
>> and returned a function as result.
>> However it seems to me unPythonesque (i.e. an exception to Python's normal
>> consistency) that the syntax of what follows the '@' should be restricted to
>> either a single (function) identifier or a single (function) identifier with
>> an argument list.
>> The example I tried, which seems not an unreasonable sort of thing to do,
>> was along the lines of:
>>
>> def deco1(func):
>>     <deco1-suite>
>> def deco2(func):
>>     <deco2-suite>
>>
>> DecoList = [deco1, deco2]
>>
>> @DecoList[0]    # NO - CAUSES SYNTAX ERROR
>> def foo():
>>     pass
>>
>> I am sure other guys have their own examples.
>>
>> I am of course not the first person to raise this issue, and I see that
>> Guido has a "gut feeling" against allowing a general expression after the
>> '@'.
>>
>> BUT - a general expression can be "smuggled in" very easily as a function
>> argument:
>>
>> def Identity(x): return x
>>
>> @Identity(DecoList[0])    # THIS WORKS
>> def foo():
>>     pass
>>
>> So - the syntax restriction seems not only inconsistent, but pointless; it
>> doesn't forbid anything, but merely means we have to do it in a slightly
>> convoluted (unPythonesque) way.  So please, Guido, will you reconsider?
>>
>> Best wishes
>> Rob Cliffe
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/brett%40python.org
>


More information about the Python-Dev mailing list