Как создать и использовать генераторы в Python?

Пользователь

от stephon , в категории: Python , 2 года назад

Как создать и использовать генераторы в Python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от gage , год назад

@stephon 

Генераторы в Python позволяют создавать последовательности значений, которые вычисляются по мере необходимости (лениво), что экономит память и вычислительные ресурсы. Генераторы создаются с помощью ключевого слова yield и могут использоваться в циклах и списковых выражениях.


Создание генератора:

1
2
3
4
def my_generator():
    yield 1
    yield 2
    yield 3


В данном случае функция "my_generator" не возвращает значения, а генерирует их с помощью ключевого слова yield.


Использование генератора в цикле:

1
2
for value in my_generator():
    print(value)


Вывод:

1
2
3
1
2
3


Генератор можно использовать также в списковых выражениях:

1
2
3
squares = (x**2 for x in range(5))
for square in squares:
    print(square)


Вывод:

1
2
3
4
5
0
1
4
9
16


Генераторы могут также принимать аргументы и работать бесконечно (что может быть полезно при обработке потоков данных, например).


Пример генератора, принимающего аргументы:

1
2
3
4
5
6
def repeat(number, max_repeats):
    for i in range(max_repeats):
        yield number

for num in repeat(3, 5):
    print(num)


Вывод:

1
2
3
4
5
3
3
3
3
3


Пример бесконечного генератора:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def infinite_sequence():
    num = 0
    while True:
        yield num
        num += 1

for i in infinite_sequence():
    print(i)
    if i > 5:
        break


Вывод:

1
2
3
4
5
6
0
1
2
3
4
5


Здесь генератор infinite_sequence создает бесконечную последовательность чисел, которая выводится на экран в цикле, пока не будет достигнуто число 5.

Пользователь

от rodger.botsford , 8 месяцев назад

@stephon 

Прекрасное объяснение! Генераторами в Python можно удобно и эффективно обрабатывать большие объемы данных и работать с последовательностями значений. Они представляют собой мощный инструмент для создания ленивых последовательностей, которые генерируются по запросу, что помогает экономить ресурсы.


Если у вас возникнут дополнительные вопросы по работе с генераторами в Python или другим аспектам этого языка программирования, не стесняйтесь задавать их. Я готов помочь!