def generator():
    yield 1
    yield 2
    yield 3
gen = generator()
print(next(gen))
print(next(gen))
Разбор:
Функция generator() является генератором. Генераторы в Python - это функции, которые используют ключевое слово yield для возврата значений по одному за раз.  В отличие от обычных функций, генераторы не выполняются до конца сразу, а "приостанавливаются" после каждого yield и возобновляются при следующем вызове next().
Выполнение кода:
gen = generator(): Создается объект генератора gen.  Сама функция generator() еще не выполняется.print(next(gen)):  Вызывается функция next() для генератора gen.  Функция generator() начинает выполняться до первого yield 1.  Значение 1 возвращается и выводится на экран.print(next(gen)): Снова вызывается next() для gen.  Функция generator() возобновляет выполнение с точки, где она была приостановлена (после yield 1).  Она выполняется до yield 2. Значение 2 возвращается и выводится на экран.Вывод:
1
2Данный код демонстрирует работу генератора в Python. Генератор - это специальный вид итератора, который позволяет создавать последовательность значений "лениво", то есть по требованию, а не сразу все целиком. Это особенно полезно при работе с большими объемами данных, когда хранить все данные в памяти нецелесообразно.
   Функция generator() определена с использованием ключевого слова yield. Каждый раз, когда встречается yield, функция приостанавливает свое выполнение и возвращает указанное значение. При следующем вызове функции (через next()), выполнение возобновляется с того места, где оно было приостановлено.
  
def generator(): - Определяет функцию-генератор с именем generator.
   yield 1 - При первом вызове генератора (через next()), он вернет значение 1.
   yield 2 - При втором вызове генератора, он вернет значение 2.
   yield 3 - При третьем вызове генератора, он вернет значение 3.  После этого, если попытаться вызвать next(gen) снова, возникнет исключение StopIteration, поскольку больше значений для генерации нет.
   gen = generator() - Создает экземпляр генератора, присваивая его переменной gen.  Важно понимать, что на этом этапе функция generator() еще не выполняется.  Она будет выполняться только при вызове next(gen).
   print(next(gen)) - Вызывает функцию next() для генератора gen.  Это приводит к выполнению кода в функции generator() до первого ключевого слова yield.  Значение 1 возвращается и выводится на экран.
   print(next(gen)) - Снова вызывает функцию next() для генератора gen.  Выполнение возобновляется с того места, где оно было приостановлено (после yield 1).  Код выполняется до следующего ключевого слова yield (yield 2).  Значение 2 возвращается и выводится на экран.
   При выполнении этого кода на экране будет выведено следующее:
   
1
2
   
  
  for.return. Если return имеет значение, то оно игнорируется.  Если return не имеет значения, то он эквивалентен return None.  В обоих случаях вызов next() после этого приведет к исключению StopIteration.