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
.