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@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to