TGViewer
Python: задачки и вопросы Python: задачки и вопросы @quiz_python · 6.93K subscribers
Post #4455 850
Генератор 𝚐𝚎𝚗 создаётся как выражение: 𝚐𝚎𝚗 = ( 𝚡 * 𝚡 𝚏𝚘𝚛 𝚡 𝚒𝚗 𝚖𝚊𝚔𝚎() 𝚒𝚏 𝚡 % 𝟸 ). В этот момент 𝚖𝚊𝚔𝚎() УЖЕ вызывается — Python сразу вычисляет самый внешний итерируемый объект, чтобы создать итератор. Поэтому «build» выводится при создании генератора, ДО строки с 𝚙𝚛𝚒𝚗𝚝. Ленивыми остаются только фильтр 𝚒𝚏 𝚡 % 𝟸 и преобразование 𝚡 * 𝚡 — они применяются при итерации.

В строке 𝚙𝚛𝚒𝚗𝚝(𝚜𝚞𝚖(𝚐𝚎𝚗), 𝚕𝚒𝚜𝚝(𝚐𝚎𝚗)) аргументы оцениваются слева направо.

🔘Сначала вызывается 𝚜𝚞𝚖(𝚐𝚎𝚗). Генератор начинает итерацию по списку из 𝚖𝚊𝚔𝚎(), применяя фильтр 𝚒𝚏 𝚡 % 𝟸 — остаются 𝟷 и 𝟹. К ним применяется 𝚡 * 𝚡 → 𝟷, 𝟿, а 𝚜𝚞𝚖 даёт 𝟷𝟶.

🔘Затем вызывается 𝚕𝚒𝚜𝚝(𝚐𝚎𝚗). Но генератор уже исчерпан предыдущей суммой: его внутренний итератор достиг конца. Повторная попытка даёт пустую последовательность → []. При этом list обрабатывает StopIteration и ошибки не будет.

Итоговая печать выводит «𝟷𝟶 []». Поэтому верный вариант — «build» (вывелось ДО строки с 𝚙𝚛𝚒𝚗𝚝), а затем «𝟷𝟶 []».

Полезные выводы:
🔘 Генераторы «одноразовые»: один проход — и состояние на конце. Хотите повторного обхода — сохраните данные: 𝚍𝚊𝚝𝚊 = 𝚕𝚒𝚜𝚝(𝚐𝚎𝚗) или создайте новый генератор.
🔘Самый внешний итератор (𝚖𝚊𝚔𝚎()) вычисляется немедленно при создании генератора, поэтому побочные эффекты в нём проявятся сразу. Ленивыми остаются только условия и преобразования эллементов.
More from @quiz_python
  1. Sep 22, 2026Развёрнутое пояснение: 1. Вызов build_batch создаёт генератор, но его тело пока не исполня…
  2. Sep 22, 2026Post #4884
  3. Sep 22, 2026Развёрнутое пояснение: 1. Вызывается load_config, управление переходит в блок try. 2. Перв…
  4. Sep 22, 2026Post #4882
  5. Sep 21, 2026Развёрнутое пояснение: 1. make_handlers создаёт пустой список handlers. 2. Цикл дважды при…
  6. Sep 21, 2026Post #4880
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →