Chapter 5. Iterators and Generators
When many people with experience in another language start learning Python, they are taken
aback by the difference in for loop notation. That is to say, instead of
writing
#Other languagesfor(i=0;i<N;i++){do_work(i);}
they are introduced to a new function called range:
# Pythonforiinrange(N):do_work(i)
It seems that in the Python code sample we are calling a function, range,
that creates all of the data we need for the for loop to continue. Intuitively,
this can be quite a time-consuming process—if we are trying to loop over the
numbers 1 through 100,000,000, then we need to spend a lot of time creating that
array! However, this is where generators come into play: they essentially allow us to
lazily evaluate these sorts of functions so we can have the
code-readability of these special-purpose functions without the performance
impacts.
Note
Technically, range is a special
range type and
not a generator. However, it still is useful to get at the “lazy evaluation”
nature of generators, especially since most uses of this range-type parallel
generators. To make them exactly the same, you can run the range through the
iter function to be sure that the behavior you are seeing is generator-specific ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access