[Python-Dev] Re: 2.4a2, and @decorators

David Eppstein eppstein at ics.uci.edu
Tue Aug 3 20:52:22 CEST 2004


BTW, here's another use case I haven't seen suggested yet:

    def substitution_for(regexp):
        sub = re.compile(regexp).sub
        return lambda func: lambda text: sub(func,text)

e.g. (example from some recent code of mine, redone as a decorator)

    @substitution_for('[a-z][A-Z]')
    def camelspace(m):
        """Insert space into camelcase regexp match."""
        return m.group(0)[0]+' '+m.group(0)[1:]

    ...

    info.title = camelspace(info.basefilename)

Instead my current code defines a separate variable for the 
re.compile().sub object, then later has to put this variable together 
correctly with the undecorated camelspace function to perform the 
substitution.  Using decorators allows the sub and replacement function 
to become merged into a single object with a more intuitive API.
(Also, my actual code uses more than one of these substitutions...)

I don't generally prefer to use explicit lambdas but expanding them out 
with names makes the definition of substitution_for a lot longer without 
much readability gain in my eyes.

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



More information about the Python-Dev mailing list