Генераторы, примеры, назначение.
Генераторы — это «ленивые» итераторы — функции, возвращающие следующий элемент тогда, когда он запрашивается. В генераторах запоминается точка выхода из функции и при следующем обращении работа функции продолжается с места выхода.
Для создания генераторов используют функции, содержащие в своем теле ключевое слово «yield» — такие функции возвращают объект-генератор.
def reverse(data):
new_data = list(data)
new_data.reverse()
for item in new_data:
yield item
>>> rev = reverse("string")
>>> rev
<generator object reverse at 0x7fa00b285aa0>
>>> [char for char in rev]
['g', 'n', 'i', 'r', 't', 's']
В генераторах списков можно использовать любые выражения Python.
С помощью генераторов списков можно легко отобразить один список в другой, применив некоторую функцию к каждому элементу.
>>> a_list = [1, 9, 8, 4]
>>> [elem * 2 for elem in a_list]
[2, 18, 16, 8]
>>> a_list
[1, 9, 8, 4]
>>> a_list = [elem * 2 for elem in a_list]
>>> a_list
[2, 18, 16, 8]
Генераторы множеств
>>> a_set = set(range(10))
>>> a_set
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> {x ** 2 for x in a_set}
{0, 1, 4, 81, 64, 9, 16, 49, 25, 36}
>>> {x for x in a_set if x % 2 == 0}
{0, 8, 2, 4, 6}
>>> {2**x for x in range(10)}
{32, 1, 2, 4, 8, 64, 128, 256, 16, 512}
Last updated
Was this helpful?