На этом шаге мы рассмотрим ее реализацию.
В этот шаблон можно добавить еще одно полезное дополнение, и это фильтрация элемента по условиям. Приведем пример:
>>> even_squares = (x * x for x in range(10) if x % 2 == 0)
Данный генератор порождает квадрат всех четных целых чисел от нуля до девяти. Фильтрующее условие с использованием оператора остатка % (оператора модуля) отклонит любое значение, которое не делится на два:
>>> for x in even_squares: print(x) 0 4 16 36 64
Давайте обновим наш шаблон выражения-генератора. После добавления фильтрации элементов посредством условия if шаблон выглядит так:
genexpr = (expression for item in collection if condition)
И снова этот шаблон соответствует относительно прямолинейной, но более длинной функции-генератору. Синтаксический сахар в своих лучших проявлениях:
def generator(): for item in collection: if condition: yield expression
На следующем шаге мы рассмотрим встраиваемые выражения-генераторы.