I moved the state into the Until instance vs. the Until class, so that it now supports nesting. But the calling syntax is even uglier - but necessary to avoid creating a new Until instance each time around. That is "while Until(blah):" evaluates and constructs a new Until instance each time around the loop, so that is why the state had to be kept in a class-level variable in your original design (which is why nesting doesn't work).
class Until: def __init__(self, mybool): self.lastTest = True self.mybool = mybool def __nonzero__(self): ret,self.lastTest = self.lastTest,self.mybool() return ret i = 0 u1 = Until(lambda : i < 0 ) while u1: print "hello" i += 1 j = 0 u2 = Until(lambda : j < 0 ) while u2: print "byebye" j += 1 -- http://mail.python.org/mailman/listinfo/python-list