[Python-Dev] 2.4a2, and @decorators

Jp Calderone exarkun at divmod.com
Tue Aug 3 06:50:56 CEST 2004


James Y Knight wrote:
> 
> [snip]
> 
> 
> An even better workaround is to write:
>   def d(arg): return arg
> 
>   @d(foo or bar)
>   def f(): ...
> 
> However, it seems as if this restriction creates a new class of 
> expression for no gain. It is true enough that *most* python expressions 
> aren't useful to write after a @, but that's also true of a lot of other 
> places an expression can be used (e.g. before a () of a function call. A 
> list comprehension can never result in a callable object. An arithmetic 
> operation usually won't.).
> 
> The only real necessary restriction on the @ operator is that its 
> argument be callable and take a single argument. Many expressions could 
> return a callable object. Why not let them? Is it really worth having a 
> special case just to SyntaxError expressions that sometimes won't result 
> in an appropriate callable?
> 
> Things someone might want to do, ordered roughly from most reasonable to 
> least reasonable ;)
> @foo().bar()
> @foo or bar
> @mydecorators['foo']
> @lambda f: foo(f) or bar(f)
> 
> Why disallow these forms? It seems quite difficult, especially, to 
> explain why the first one does not, or should not, work.
> 
> James
> 

   For what it's worth, I agree with James completely.

   Jp


More information about the Python-Dev mailing list