tweaking @decorator syntax

Jeff Shannon jeff at ccvcorp.com
Fri Aug 6 15:58:34 EDT 2004


Andrew Durdin wrote:

>
>5. In appearance it looks like a special kind of statement; and it is
>not at all obvious to me that it is rather a kind of attribute or
>modifier of the following function definition. I don't know of any
>other construction in Python that performs a similar, unmarked (i.e.
>non-explicit) modification of the following statement. So to me the
>@syntax comes across as extremely un-Pythonic (by that I mean
>radically inconsistent with the conventions of the rest of the
>language). For this same reason, I dislike all the proposed syntaxes
>which involve placing something before the "def" without a subsequent
>indented block.
>  
>

Ah, yes!  Thank you for expressing the thing that's been really bugging 
me about this syntax, but which I hadn't quite managed to put into 
coherent words.  I kept thinking that having all that stuff "stacked up" 
above the function def looked horribly ugly, but I couldn't quite 
express why...  but I think you've hit on it exactly, there.

The fact that it adds punctuation to an otherwise low-punctuation 
language compounds matters, and I too would rather see a keyword than a 
punctuation mark (though I do also understand the reluctance to add new 
keywords).  But really, it's the placement rather than the punctuation 
that truly grates on my eyes.

Hm, just as an experiment...

    def f(x,y):
        '''tests two ints for equality
        '''
        @accepts(int, int)
        @returns(bool)

        return x == y


I still don't care for the @, but this looks much less jarring to me.  
At very least, the decorators are much more clearly associated with the 
particular function.

Jeff Shannon
Technician/Programmer
Credit International




More information about the Python-list mailing list