Метод 𝚜𝚎𝚗𝚍() отправляет значение в генератор, которое становится результатом текущего выражения 𝚢𝚒𝚎𝚕𝚍. Первый 𝚗𝚎𝚡𝚝(𝚐) запускает генератор и выдаёт 1, затем 𝚐.𝚜𝚎𝚗𝚍(5) отправляет 5 в переменную 𝚡, вычисляет 𝚡 * 2 = 10 и выдаёт это значение.
Подробный разбор по шагам
1️⃣Создаётся объект генератора 𝚐 = 𝚐𝚎𝚗(). На этом этапе функция ещё не начала выполняться, генератор находится в состоянии «не запущен».
2️⃣Вызов 𝚗𝚎𝚡𝚝(𝚐) запускает выполнение генератора. Код доходит до строки 𝚡 = 𝚢𝚒𝚎𝚕𝚍 1, выдаёт значение 1 и приостанавливается. Выражение 𝚢𝚒𝚎𝚕𝚍 1 ещё не завершено — переменная 𝚡 пока не получила значение. Функция 𝚙𝚛𝚒𝚗𝚝 выводит первую строку: 1.
3️⃣Вызов 𝚐.𝚜𝚎𝚗𝚍(5) возобновляет выполнение генератора и отправляет значение 5 внутрь генератора. Это значение становится результатом выражения 𝚢𝚒𝚎𝚕𝚍 1, то есть переменная 𝚡 получает значение 5.
4️⃣Генератор продолжает выполнение со следующей строки 𝚢𝚒𝚎𝚕𝚍 𝚡 * 2. Вычисляется 5 * 2 = 10, и это значение выдаётся наружу. Метод 𝚜𝚎𝚗𝚍() возвращает выданное значение 10, которое передаётся в 𝚙𝚛𝚒𝚗𝚝.
5️⃣Функция 𝚙𝚛𝚒𝚗𝚝 выводит вторую строку: 10. Итого на экране появляются две строки: 1 и 10.
Эта задача показывает, что генераторы поддерживают двустороннюю коммуникацию — паттерн, используемый в конвейерах обработки данных и state machines.
Post #4500
726
- 👍 2