Maintaining State in Generators. Python
Introduction
В этой статье продолжается обзор генераторов в Python 3 начатый
здесь
Создайте файл
generators_demo.py
и копируйте туда код из примеров.
Запустить файл можно командой
python3 generators_demo.py
Рассмотрим код, который будет возвращать из списка определённое количество неповторяющихся элементов
def take(count, iterable):
counter = 0
for item in iterable:
if counter == count:
return
counter += 1
yield item
def distinct(iterable):
seen = set()
for item in iterable:
if item in seen:
continue
yield item
seen.add(item)
# continue - finish current loop iteration and begin the next iteration immediately
def run_pipeline():
items = [3, 6, 6, 2, 1, 1]
for item in take(3, distinct(items)):
print(item)
run_pipeline()
distinct - это генератор, который выдаёт по одному элементу, если
этого элемента нет во множестве (в set) seen
take - это тоже генератор - он просто берет определённое количество элементов
python generators_demo.py
3 6 2
Каждый вызов функции-генератора создаёт новый генератор-объект (generator object)