Duncan Booth wrote: > My other problem with this is that the decorator is very fragile although > this may be fixable
This version should be more robust against exceptions: class tail_recursive(object): """ tail_recursive decorator based on Kay Schluehr's recipe http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/496691 """ CONTINUE = object() # sentinel def __init__(self, func): self.func = func self.firstcall = True def __call__(self, *args, **kwd): try: if self.firstcall: # start looping self.firstcall = False while True: result = self.func(*args, **kwd) if result is self.CONTINUE: # update arguments args, kwd = self.argskwd else: # last call break else: # return the arguments of the tail call self.argskwd = args, kwd return self.CONTINUE except: # reset and re-raise self.firstcall = True raise else: # reset and exit self.firstcall = True return result -- http://mail.python.org/mailman/listinfo/python-list