Generator Mastery

Python GeneratorsFree Lesson

Advertisement

Generator Mastery

Generator pipelines, coroutines, and advanced patterns.

Overview

Master generator patterns.

Generator Pipelines

def read_data(source):
    for item in source:
        yield item

def filter_data(data, predicate):
    for item in data:
        if predicate(item):
            yield item

def transform_data(data, func):
    for item in data:
        yield func(item)

# Pipeline
source = range(100)
pipeline = transform_data(
    filter_data(read_data(source), lambda x: x % 2 == 0),
    lambda x: x ** 2
)

for item in pipeline:
    print(item)

Coroutine Pipelines

def coroutine(func):
    def wrapper(*args, **kwargs):
        gen = func(*args, **kwargs)
        next(gen)
        return gen
    return wrapper

@coroutine
def averager():
    total = 0.0
    count = 0
    average = None
    while True:
        term = yield
        if term is None:
            break
        total += term
        count += 1
        average = total / count
    return (count, average)

avg = averager()
avg.send(10)
avg.send(20)
avg.send(30)
try:
    avg.send(None)
except StopIteration as e:
    print(e.value)  # (3, 20.0)

Practice

Build a data processing pipeline using generators.

Advertisement

Need Expert Python Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement