💻 Примеры генераторов

⚡ Минимальный пример

def countdown(n):
    while n > 0:
        yield n
        n -= 1

for num in countdown(3):
    print(num)  # 3 2 1

Пример 1. Простой генератор

# generator_01_basic.py
def generate_values():
    print("Старт")
    yield 1
    print("Середина")
    yield 2
    print("Финиш")

gen = generate_values()
print(next(gen))
print(next(gen))

Пример 2. countdown

# generator_02_countdown.py
def countdown(n: int):
    while n > 0:
        yield n
        n -= 1

for num in countdown(5):
    print(num)

Пример 3. Бесконечный генератор с остановкой

# generator_03_infinite.py
def infinite_counter(start: int = 1):
    while True:
        yield start
        start += 1

counter = infinite_counter()
for _ in range(10):
    print(next(counter))

Пример 4. Распределение задач

# generator_04_tasks.py
def task_assigner(employees):
    while True:
        for employee in employees:
            yield employee

team = ["Alice", "Bob", "Charlie"]
assigner = task_assigner(team)
for i in range(7):
    print(f"Task {i + 1} assigned to: {next(assigner)}")

Пример 5. close()

# generator_05_close.py
def sensor_data(data):
    for value in data:
        yield value

sensor = sensor_data([10, 20, 30, 40, 50])
for value in sensor:
    print(value)
    if value >= 30:
        sensor.close()
        break

Пример 6. yield from

# generator_06_yield_from.py
def flatten(nested):
    for item in nested:
        if isinstance(item, list):
            yield from flatten(item)
        else:
            yield item

print(list(flatten([1, [2, [3, 4]], 5])))  # [1, 2, 3, 4, 5]