Развёрнутое пояснение:
1. Определяются две функции-генератора: inner и outer.
2. При вызове list(outer()) создаётся генератор outer.
3. Первый yield 1 в outer приостанавливает выполнение и возвращает значение 1.
4. Затем выполняется выражение v = yield from inner().
5. yield from делегирует управление генератору inner, поэтому следующим возвращается его yield 2.
6. Когда inner завершается оператором return 'done', это значение становится результатом выражения yield from.
7. Переменная v получает строку 'done'.
8. Последний yield v возвращает 'done'.
9. Генератор outer завершается, и list собирает все полученные значения: 1, 2 и 'done'.
10. print выводит [1, 2, 'done'].
Почему это важно: механика yield from используется при построении ленивых пайплайнов обработки данных, рекурсивных обходов деревьев и корутин. Понимание того, что return подгенератора становится возвращаемым значением yield from, помогает правильно комбинировать генераторы и передавать результаты между этапами пайплайна без промежуточных коллекций.
Post #4821
328
Python: задачки и вопросы
- ✍ 3