Guido> If they really are all that simple and for this specific purpose, I Guido> wonder if you can't embed a reference to a variable directly, e.g. Guido> bal = Arbno(Notany("()") | "(" + Local("bal") + ")") I will sometimes want the lambda to yield something more complicated than a variable. I also use lambda heavily in the implementation of the library. A sample code fragment: def evaluate(self): data, end = \ self.pat.traverse(lambda obj, *args: obj.evaluate(self.seq, *args), self.begin, self.data) return data Yes, I realize I could rewrite it this way: def evaluate(self): def foo(obj, *args): return obj.evaluate(self.seq, *args) data, end = self.pat.traverse(foo, self.begin, self.data) return data but I'd rather not. (Actually, what I really want here is to be able to write this: def evaluate(self): data, end = self.pat.traverse(virtual evaluate, self.begin, self.data) return data where "virtual evaluate" is a made-up notation for "the evaluate method of whatever object I wind up getting my hands on.")