Iterators provide us with an elegant solution to problems discussed previously:
def result_iterator(): for k in itertools.count(): # infinite iterator # call various functions here # that t lists compute "result" ... yield result
With iterators, we separate the task of generating the computed values without bothering about the stopping condition or about the storage.
- If the user of that code wants to store the  first values, it is easily done using the list constructor:
L = list(itertools.islice(result_iterator(), n)) # no append needed!
- If the user wants the sum of the first n generated values, this construction is recommended:
# make sure that you do not use numpy.sum here s = sum(itertools.islice(result_iterator(), n))
- If the user wants to generate all elements until a certain condition is fulfilled, the function itertools.takewhile comes in handy:
L=list(itertools...