
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/