Раздел 45 · Python backend: Тарбадель

Генераторы: yield from, send, throw, close

middle~40 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Узор будит тебя под утро. На его экране обрывок, который он выловил из журнала ярусов в 03:00, рядом со следами объекта, притворявшегося строкой:

def warden():
    mode = "спит"
    while True:
        command = yield mode
        if command == "проснись":
            mode = "слушает"
        elif command is not None and mode == "слушает":
            mode = f"исполняет: {command}"

Элодий берёт распечатку, долго смотрит и возвращает: «Итератор ты написал в двух классах. Здесь итератор в одной функции, и он ещё и слышит. Как зовут функцию, которая умеет остановиться посреди тела и подождать?»

В прошлом уроке ты собрал итератор руками: класс, __next__, состояние в атрибутах, StopIteration в конце. Сегодня то же самое делается одним словом, yield. А потом выяснится, что yield умеет работать в обе стороны, и ты научишься говорить со скриптом Призрака: send, throw и close.

урок из курса

Урок из курса «Python backend: Тарбадель». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.