[Python-Dev] def ... decorate

Roman Suzi rnd at onego.ru
Fri Aug 13 19:27:23 CEST 2004


On Fri, 13 Aug 2004, Josiah Carlson wrote:

>I've kept my nose out of the decorator discussion, but I thought I would
>give my opinion on this one...

>> Bingo!
>Oh god no.

;)

>> Just replace decorate with "from" and the nice syntax is found:
>>
>>     def f:
>>         staticmethod
>>         grammarrule('statement : expression')
>>         version("Added in 2.4")
>>         deprecatedmethod
>>         type_(None)
>>     from self, p:
>>         """docstring here"""
>>         print p[1]
>
>Gah, the horror.
>
>>  + doesn't surprise Python programmer, because it is like try-except, etc
>
>It surprises anyone who expects the function signature immediately after
>the name.

I do disagree. In my suggestion function is being defined in natural order
hich is illustratable by use of lambda:


f =                               \
  decor(                          \
    lambda arg:                   \
      return_val)

Decorators could be destructive and change function completely, so it's
pitiful signature doesn't mean much.

>>  + reads a natural language (with implicit "with"  after "f")
>
>But it is so radically different from current definitions that it breaks
>current understanding about the language.

Why? IMHO @s are much more radical.

>It also requires people to
>learn two significantly different semantics for defining a function.

No more "significantly different" than learning

import m

and

from m import something

>The good proposals (IMO) keep the function name and signature unchanged.
>
>So let us read this "natural language" (my interpretation of the syntax
>given above):
>
>define f as a staticmethod... from the arguments self and p with
>function body...  Not bad, though I don't like the visual aesthetics.

Ok. Now I see our disagrement. I am thinking in terms of
applying decorators to make some other function FROM
a given function while you are reasoning about "adding" attributes to the
defined function.

>>  + doesn't require any new keywords or symbols and "prefix" operators
>
>Prefix operators don't seem that bad to me, nor to Guido (who offered
>them in the first place), nor to the dozen+ others who have stated that
>"@, !, %, *, -, +, | or & is cool".

(ooops! I mean "prefix statements" - statements sticking to
other statements, modifying their semantics)

>As for keywords, there has been an offered solution; the use of a future
>import.  Similar to the way yield was used in 2.3.

IMO, decorators deserve no keywords...

>>From is an import semantic, not function definition.  Overloading 'from'
>does remove the necessity of a new keyword, but so does the use of the
>symbols previously offered.

I see no problem overloading preposition like "from", "as", "to", etc,
if it adds natural readability to language statements.

>>  + is explicit about transformation
>>  + no additional indentation
>
>Ahh, but you indent the block of decorators before the function
>definition must /always/ be read in order to figure out . While this has
>been done before (try, except, finally)

I mean "no additional" level, like other group decoration proposals.

>>  - grepping for defs now require more effort, so probably second name should
>>    be allowed after "from" or exactly this.

However, I am not sure Guido will change his mind and replace
'@' with something else. Probably, Python became too boring without
fresh syntax solutions like pies.

If so, I'd added a possibility to use ";" to delimit decorators:

@ decor1; decor2
def f(x):
  ...

Or:

@decor1; @decor2
def f(x):
  ...

May double pie mean "repeat last time used pie":

@staticmethod
def m(self, a):
  ...

@@
def n(self, a):
  ...


Sincerely yours, Roman Suzi
-- 
rnd at onego.ru =\= My AI powered by GNU/Linux RedHat 7.3


More information about the Python-Dev mailing list