
Update of /cvsroot/python/python/nondist/peps In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5886 Modified Files: pep-0318.txt Log Message: update from Kevin Smith Index: pep-0318.txt =================================================================== RCS file: /cvsroot/python/python/nondist/peps/pep-0318.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** pep-0318.txt 29 Jul 2003 15:31:13 -0000 1.3 --- pep-0318.txt 28 Feb 2004 19:09:44 -0000 1.4 *************** *** 9,13 **** Created: 05-Jun-2003 Python-Version: 2.4 ! Post-History: 09-Jun-2003, 10-Jun-2003 --- 9,13 ---- Created: 05-Jun-2003 Python-Version: 2.4 ! Post-History: 09-Jun-2003, 10-Jun-2003, 27-Feb-2004 *************** *** 96,103 **** where DECORATORS is a comma-separated list of expressions, ! or a tuple. ! Other syntaxes have been proposed in comp.lang.python. The ! most common are demonstrated below. def foo(self) [synchronized(lock), classmethod]: --- 96,143 ---- where DECORATORS is a comma-separated list of expressions, ! or a tuple. Using the latter form, the last example above ! would look like: ! def foo(self) as (synchronized(lock), classmethod): ! perform method operation ! ! This form make is possible for the list of decorators to ! span multiple lines without using the line continuation operator. ! ! Alternate Syntaxes ! ! Other syntaxes have been proposed in comp.lang.python and ! python-dev. Unfortunately, no one syntax has come out as a clear ! winner in the lengthy discussions. The most common suggestions ! are demonstrated below. The proposed syntax is also included ! for easy comparison. ! ! Proposed Syntax ! ! def foo(self) as synchronized(lock), classmethod: ! perform method operation ! ! def foo(self) as (synchronized(lock), classmethod): ! perform method operation ! ! Prefix Forms ! ! def [synchronized(lock), classmethod] foo(self): ! perform method operation ! ! def synchronized(lock), classmethod foo(self): ! perform method operation ! ! # Same as above, but only identifiers are allowed ! sync = synchronized(lock) ! def sync, classmethod foo(self): ! perform method operation ! ! # Java-like ! sync = synchronized(lock) ! def @sync @classmethod foo(self): ! perform method operation ! ! Postfix Forms def foo(self) [synchronized(lock), classmethod]: *************** *** 110,119 **** perform method operation ! These three forms use syntax that just seems arbitrary and which ! does not help the user to comprehend the meaning of it. In ! addition, since the order in which the decorators are applied ! may matter, the third, dictionary-style, syntax must be ! eliminated. ! Implementation Issues --- 150,160 ---- perform method operation ! I'm not as fond of the forms that use '[ ]' since code like ! 'foo()[a]' looks as if you are getting the item 'a' from 'foo()'. ! Although, this isn't as much of an issue when using '[ ]' in ! a prefix form. The Java-like syntax adds new syntax that is ! very arbitrary and is almost Perl-ish. In addition, since the ! order in which the decorators are applied may matter, the last, ! dictionary-style, syntax must be eliminated. Implementation Issues *************** *** 152,155 **** --- 193,204 ---- name when the 'def' statement is executed. + Open Issues + + It is not clear at the moment if it is even possible to have + multiple decorators for a function. If decorators are required + to take a function/method and return a descriptor, it might + not even be possible to wrap multiple decorators. This should + be explored since the best syntax for multiple decorators + may not be the same as the best syntax for a single decorator. Current Implementations
participants (1)
-
goodger@users.sourceforge.net