TGViewer
Python Lounge: работа и стажировки для программистов Python Lounge: работа и стажировки для программистов @python_lounge · 3.72K subscribers
Post #134 3.07K
Генераторы

Выглядят функции-генераторы также как и обычные, но содержат выражения с ключевым словом yield для последовательного генерирования значений, которые могут быть использованы в циклах for, либо их получения при помощи функции next.

На каждой yield работа функции временно приостанавливается, при этом сохраняется состояние исполнения, включая локальные переменные, указатель на текущую инструкцию, внутренний стек и состояние обработки исключения. При последующем обращении к итератору генератора функция продолжает своё исполнение с места, на котором была приостановлена. Этим функции-генераторы отличаются от обычных функций, при вызове которых исполнение всякий раз начинается с начала.

Если функция достигает инструкции return, либо конца, возбуждается исключение StopIteration и итератор исчерпывает себя.

def generator():
for item in ('first', 'second', 'third'):
yield item

Теперь можно вызывать эту функцию и использовать функцию next.

gen = generator()
value = next(gen)
print(value)
# Output: first

Достаточно часто, а точнее практически всегда, генераторы используют в циклах for. Преимущество такого подхода в том, что можно получить все возможные значения и не словить ошибку StopIteration.

for item in gen:
print(item, end=' ')
# Output: second third

Теперь если вызвать функцию next еще раз, то получим то самое исключение.

next(gen)
# Output:
Traceback (most recent call last):
File "main.py", line 12, in <module>
  next(gen)
StopIteration
More from @python_lounge
  1. Jul 27, 2026Промпт-инженер для AI-фото в Onephoto Опыт с нейросетями не обязателен, важнее насмотренно…
  2. Jul 23, 2026Представитель в Т-Банк Отклик в 1 клик Идеальный вариант подработки/работы! Среднее вознаг…
  3. Jul 15, 2026Менеджер по продажам Мы занимаемся профессиональным рекрутингом для Министерства обороны Р…
  4. Jul 9, 2026Media Buyer / Performance Marketer (Meta* Ads) — eCommerce / Digital Products Мы — MotionP…
  5. May 26, 2026Специалист техподдержки в Mailganer Мы развиваем кросс-канальную платформу рассылок для ИТ…
  6. May 6, 2026Мы ищем Project / Product Manager’а, который способен взять проект целиком: от структуры и…
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 →