В прошлый раз мы говорили про списки в Python. Сегодня поговорим про особенности работы с Python-генераторами. Читайте далее про особенности работы генераторов в языке Python, которые обеспечивают разработчика возможностью оптимального использования ресурсов.
Что представляют собой генераторы в Python
Генераторы — это объекты, выполнение которых можно возобновлять и приостанавливать. При этом они возвращают объект, который можно итерировать (возвращать каждое следующее значение по отдельности). Существуют следующие виды генераторов в Python [1]:
- генераторные выражения — возвращают объекты, производящие результаты по запросу (обычно с помощью метода
next()
); - генераторные функции — функции, которые возвращают значения каждой итерации. Однако вместо оператора
return
в них используется инструкцияyield
. Также для вызова генераторных функций используется цикл.
Особенности работы с генераторами в Python: несколько практических примеров
Для создания объекта-генератора в Python можно использовать так называемое генераторное выражение, которое внутри себя использует цикл. В качестве примера рассмотрим пример генератора, который будет считать квадраты чисел от 1 до 4. Для создания такой последовательности используется функция range()
[1]:
a = (i**2 for i in range(1,5))
Для вызова значений генератора используется метод next()
. Причем, для вывода каждого нового значения, необходимо каждый раз вызвать метод next()
:
next(a) # 1 next(a) # 4 next(a) # 9 next(a) # 16 next(a) # StopIteration exception
Стоит обратить внимание, что если вызвать метод next()
после вывода последнего элемента, генератор сотрет его из памяти и выдаст исключение StopIteration
.
В Python генератор можно создавать не только с помощью выражений, но и с помощью специальных генераторных функций. Единственным отличием от обычной функции будет лишь то, что в функциях-генераторах вместо оператора return используется инструкция yield, которая приостанавливает генератор и возвращает какое-то значение. В качестве примера создадим генераторную функцию для вычисления квадратов чисел от 1 до 4, как это было выше [1]:
def gen_sqr(m): for i in range (1,m): yield i**2
Еще одной отличительной особенностью такой функции будет то, что вызывается она через цикл:
a=gen_sqr for i in a(6): print (i) # 1 # 4 # 9 # 16 # 25
Таким образом, благодаря генераторам, в Python существует возможность оптимального и экономного использования памяти. Это делает Python универсальным и надежным средством для работы с производительными приложениями, а также с Big Data обработкой.
Графовые алгоритмы. Бизнес-приложения
Код курса
GRAF
Ближайшая дата курса
по запросу
Продолжительность
24 ак.часов
Стоимость обучения
54 000 руб.
Освоить Python на профессиональном уровне в разработчика различных приложений и прочих прикладных областях Data Science вы сможете на практических курсах по Python в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:
- DPREP: Подготовка данных для Data Mining на Python
- Разработка и внедрение ML-решений
- Графовые алгоритмы. Бизнес-приложения
- Нейронные сети на Python
- NLP с Python