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)

Share in social media: