@decorator syntax is sugar, but for what exactly?

Duncan Booth duncan.booth at invalid.invalid
Sun Aug 8 09:20:34 EDT 2004


Dan Sommers <me at privacy.net> wrote in 
news:m2u0vdj1bn.fsf at unique.fully.qualified.domain.name.yeah.right:

> On Sun, 8 Aug 2004 18:24:58 +1000,
> Anthony Baxter <anthonybaxter at gmail.com> wrote:
> 
>> In many cases, these new features actually lead to smaller, simpler
>> code. I challenge _anyone_ to tell me that
>>   apply(func, args, kwargs) 
>> is better than 
>>   func(*args, **kwargs)
> 
> Okay, I will.  The old way is better than the new way.
> 
> Explicit is better than implicit, after all.
> 
> Given your second example, is func the name of a function or an object
> that references a function?  Can I grep my source code to find a
> function named func?  (Okay, I'll find the variable named func, so at
> least I'll have some clue as to what's going on.)  Is there a "from
> module import func" statement in sight?  What happens when I look up
> "func" in the Python documentation to see if it's a built in name?

Why do you ask this about the second form only? func is a name that 
references a function in both cases. It doesn't matter whether that name 
was assigned directly with a def statement, or is the result of a 
subsequent binding.

> 
> C did the same thing recently.
> 
> Old C:  (*f)( argument );
> 
> New C:  f( argument );
> 
> With the old syntax, I knew immediately that f was a pointer to a
> function and that the function to which it pointed was being called
> indirectly.  With the new one, I have to track down a definition or
> declaration of f to see that. 

For 'recently' read 1987. In fact most C compilers probably implemented 
this feature before the ISO standard came out, but it was a feature of the 
first standardised version of C. I remember around that time being 
extremely glad that I could finally omit those extraneous parentheses.



More information about the Python-list mailing list