Рубрики

Генераторы в Python

Предварительные условия: выход ключевого слова и итераторов

При обсуждении генераторов участвуют два термина.

  1. Функция генератора : Функция генератора определяется как обычная функция, но всякий раз, когда ей нужно сгенерировать значение, она делает это с помощью ключевого слова yield, а не return. Если тело def содержит yield, функция автоматически становится функцией генератора.

    # Функция генератора, которая выдает 1 в первый раз,
    # 2 второй раз и 3 третий раз

    def simpleGeneratorFun():

        yield 1            

        yield 2            

        yield 3            

       
    # Код драйвера для проверки над функцией генератора

    for value in simpleGeneratorFun(): 

        print(value)

    Выход :

    1
    2
    3
  2. Generator-Object: функции генератора возвращают объект генератора. Объекты-генераторы используются либо путем вызова следующего метода для объекта-генератора, либо с помощью объекта-генератора в цикле «for in» (как показано в приведенной выше программе).

    # Программа Python для демонстрации использования
    # генератор объекта с помощью next ()

      
    # Функция генератора

    def simpleGeneratorFun():

        yield 1

        yield 2

        yield 3

       
    # x - объект генератора

    x = simpleGeneratorFun()

      
    # Перебираем объект генератора, используя next

    print(x.next()); # В Python 3 __next __ ()

    print(x.next());

    print(x.next());

    Выход :

    1
    2
    3

Таким образом, функция генератора возвращает объект генератора, который является итеративным, то есть может использоваться как Итераторы .

В качестве другого примера ниже приведен генератор чисел Фибоначчи.

# Простой генератор для чисел Фибоначчи

def fib(limit):

      

    # Инициализировать первые два числа Фибоначчи

    a, b = 0, 1

  

    # Один за другим уступают следующему числу Фибоначчи

    while a < limit:

        yield a

        a, b = b, a + b

  
# Создать генератор объекта

x = fib(5)

  
# Перебираем объект генератора, используя next

print(x.next()); # В Python 3 __next __ ()

print(x.next());

print(x.next());

print(x.next());

print(x.next());

  
# Перебираем объект генератора, используя для
# в цикле.

print("\nUsing for in loop")

for i in fib(5): 

    print(i)

Выход :

0
1
1
2
3

Using for in loop
0
1
1
2
3

Приложения: Предположим, что мы создаем поток чисел Фибоначчи, применение подхода генератора делает его тривиальным; нам просто нужно вызвать next (x), чтобы получить следующее число Фибоначчи, не заботясь о том, где или когда заканчивается поток чисел.
Более практичный тип обработки потока — обработка больших файлов данных, таких как файлы журналов. Генераторы предоставляют эффективный способ для такой обработки данных, так как в определенный момент времени обрабатываются только части файла. Мы также можем использовать Iterators для этих целей, но Generator предоставляет быстрый способ (нам не нужно писать методы __next__ и __iter__ здесь).

Ссылка ниже для более продвинутых приложений генераторов в Python.
http://www.dabeaz.com/finalgenerator/

Эта статья предоставлена Shwetanshu Rohatgi . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Генераторы в Python

0.00 (0%) 0 votes