Learning Sections show
Generators in Python
Generators are a special type of iterator in Python that allow you to iterate over a sequence of items without storing them all in memory at once. They are useful for generating large sequences of data on-the-fly, or for processing data in a memory-efficient manner.
Creating Generators
In Python, generators are created using generator functions or generator expressions:
# Generator function
def my_generator(n):
for i in range(n):
yield i
# Generator expression
my_generator = (i for i in range(10))
A generator function uses the yield
keyword to yield values one at a time, while a generator expression creates an anonymous generator.
Iterating Over Generators
You can iterate over the values produced by a generator using a for
loop:
for value in my_generator(5):
print(value)
This will print the values generated by the generator function.
Generator Expressions
Generator expressions are similar to list comprehensions, but they produce values lazily as they are needed:
# Generator expression
squares = (x**2 for x in range(10))
# Iterate over the generator expression
for square in squares:
print(square)
This will print the squares of numbers from 0 to 9.
Benefits of Generators
- Memory Efficiency: Generators produce values one at a time, so they can be more memory efficient than storing all values in memory at once.
- Lazy Evaluation: Generator expressions are evaluated lazily, meaning values are generated as they are needed, rather than all at once.
- Efficient Pipelines: Generators can be used to create efficient data processing pipelines, where each stage of processing produces values as needed.