Paul> I'd like to have a function (or other callable object) that Paul> returns 0, 1, 2, etc. on repeated calls. ... Paul> There should never be any possibility of any number getting Paul> returned twice, or getting skipped over, even if f is being called Paul> from multiple threads.
How about (untested): import Queue counter = Queue.Queue() counter.put(0) def f(): i = counter.get() counter.put(i+1) return i Obviously, if you want multiple counters for some reason a little information hiding with a class would help (also untested): import Queue class Counter: def __init__(self, start=0): self.counter = Queue.Queue() self.counter.put(start) def __call__(self): i = self.counter.get() self.counter.put(i+1) return i Skip -- http://mail.python.org/mailman/listinfo/python-list