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.