Шаг 157.
Python: тонкости программирования.
Циклы и итерации. Выражения-генераторы. Фильтрация значений

    На этом шаге мы рассмотрим ее реализацию.

    В этот шаблон можно добавить еще одно полезное дополнение, и это фильтрация элемента по условиям. Приведем пример:

>>> 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

    На следующем шаге мы рассмотрим встраиваемые выражения-генераторы.




Предыдущий шаг Содержание Следующий шаг