Working with the infinite iterators
The itertools
module provides a number of functions that we can use to enhance or enrich an iterable source of data. We'll look at the following three functions:
count()
: This is an unlimited version of therange()
functioncycle()
: This will reiterate a cycle of valuesrepeat()
: This can repeat a single value an indefinite number of times
Our goal is to understand how these various iterator functions can be used in generator expressions and with generator functions.
Counting with count()
The built-in range()
function is defined by an upper limit: the lower limit and step values are optional. The count()
function, on the other hand, has a start and optional step, but no upper limit.
This function can be thought of as the primitive basis for a function such as enumerate()
. We can define the enumerate()
function in terms of zip()
and count()
functions, as follows:
enumerate = lambda x, start=0: zip(count(start), x)
The enumerate()
function behaves as if it's a zip...