Generators and Iterators in Python in Practice

Vitalii Shloda
2 min readJul 15, 2023

Introduction

Generators and iterators are two powerful tools in Python that can be used to create and iterate over sequences of data. Generators are functions that produce a sequence of values, one at a time, while iterators are objects that can be used to iterate over a sequence of data.

In this article, we will learn how to use generators and iterators in Python. We will see how to create generators and iterators, and how to use them to iterate over sequences of data. We will also see some practical examples of how generators and iterators can be used in Python.

Prerequisites

To follow this tutorial, you should have a basic understanding of Python. You should also be familiar with the following concepts:

  • Functions
  • Iterators
  • List comprehension

Generators

Generators are functions that produce a sequence of values, one at a time. Generators are created using the yield keyword. The yield keyword tells the generator to pause execution and return the value that is passed to it. When the generator is resumed, it will continue executing from the point where it was paused.

For example, the following code defines a generator that produces the Fibonacci sequence:

def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b

This generator uses the yield keyword to return the next value in the Fibonacci sequence. The while True loop ensures that the generator will continue producing values indefinitely.

To iterate over a generator, we can use the next() function. The next() function will return the next value in the generator, or None if there are no more values to be returned.

For example, the following code iterates over the Fibonacci generator and prints the first 10 values:

for i in range(10):
print(next(fibonacci()))

This code will print the first 10 values in the Fibonacci sequence.

Iterators

Iterators are objects that can be used to iterate over a sequence of data. Iterators are created using the iter() function. The iter() function takes an iterable object as input and returns an iterator object.

For example, the following code creates an iterator for the Fibonacci sequence:

fibonacci_iterator = iter(fibonacci())

This code creates an iterator for the Fibonacci generator. The iterator can then be used to iterate over the Fibonacci sequence.

To iterate over an iterator, we can use the next() function. The next() function will return the next value in the iterator, or StopIteration if there are no more values to be returned.

For example, the following code iterates over the Fibonacci iterator and prints the first 10 values:

for i in range(10):
print(next(fibonacci_iterator))

This code will print the first 10 values in the Fibonacci sequence.

Practical Examples

Generators and iterators can be used in a variety of practical applications. Here are a few examples:

  • Generating large data sets
  • Parsing large files
  • Asynchronous programming
  • Coroutines

Conclusion

In this article, we learned how to use generators and iterators in Python. We saw how to create generators and iterators, and how to use them to iterate over sequences of data. We also saw some practical examples of how generators and iterators can be used in Python.

--

--

Vitalii Shloda

Software Engineer. I write about backend, data and other amazing stuff