Теория
Что такое генераторы и контекстные менеджеры в Python? Как вы с ними работали?
Генератор выдаёт значения по мере обхода через yield, не создавая всю последовательность сразу. Контекстный менеджер задаёт вход и выход из блока with, в том числе очистку при исключении.
Читать ответ