[Python-Dev] Re: 2.4a2, and @decorators (original) (raw)

David Eppstein eppstein at ics.uci.edu
Tue Aug 3 06:28:52 CEST 2004


In article <110DAF75-E504-11D8-8D12-000A95A50FB2 at fuhm.net>, James Y Knight <foom at fuhm.net> wrote:

> @ foo or bar > def f(): ... > > you can write > > deco = foo or bar > @deco > def f(): ...

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.).

As you say, there aren't a lot of types of Python expression that return callables. The main thing this restriction seems to prevent is @lambda, and I think preventing that is a good thing. The other possibility that comes to mind is @functable[index], but I'd have to see a use case before worrying too much that it's not allowed.

-- David Eppstein Computer Science Dept., Univ. of California, Irvine http://www.ics.uci.edu/~eppstein/



More information about the Python-Dev mailing list