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...