> I dont know guppy, > but if h.load(f) raises StopIteration upon eof, as seems implied by your > proposal, then something like the following would work. > > sets.extend(h.load(f) for _ in xrange(1e9))
Sounds like hpy has a weird API. Either it should be an iterator supporting __iter__() and next() and raising StopIteration when it's done, or it should simply return None to indicate an empty load. In the first case, you would write: sets.extend(h.load(f)) And in the second case: sets.extend(iter(partial(h.load, f), None)) The first way just uses the iterator protocol in a way that is consistent with the rest of the language. The second way, using the two argument form of iter(), is the standard way of creating an iterator from a function that has a sentinel return value. IOW, it is not normal to use StopIteration in a function that isn't an iterator. Raymond -- http://mail.python.org/mailman/listinfo/python-list