Stephen Nelson-Smith wrote: > Martin, > >> def __iter__(self): >> while True: >> for logline in self.logfile: >> heappush(self.heap, (timestamp(logline), logline)) >> if len(self.heap) >= self.jitter: >> break >> try: >> yield heappop(self.heap) >> except IndexError: >> raise StopIteration > > In this __iter__ method, why are we wrapping a for loop in a while True? > > S.
Are you more interested in one of the loops over the other? Do you have a more specific question? The for loop is a means to populate the heap to a predefined size before this iterator yields any values. You may have noticed that the first time through the heap is empty so it will loop a number of times, as defined by self.jitter, while subsequent entries into the loop will break after only one execution. Perhaps not the most efficient approach -- not sure either way, you'll have to test. The while True loop is where values are yielded, until the heap is empty again (heappop raises an IndexError) -- a fairly common pattern for generators in general, I think. The way I see it (not a programmer by trade or training, FWIW), both loops have something like a do-until style. HTH, Marty _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor