Определение: Генератор похож на обычную функцию, которая генерирует диапазон значений с помощью урожай ключевое слово. Он возвращает по одному объекту за раз. Он внутренне использует итератор. Чтобы получить доступ к следующему элементу следующий() функция используется, или мы можем ее использовать для цикл. Если мы попытаемся получить доступ к значению за пределами диапазона, он поднимет StopIteration ошибка.
Мы увидим пример, чтобы лучше понять
Бывший: функция генератора для диапазона значений
def range_fun (n):х = 0
в то время как х < n:
доход x
х + = 1
y = range_fun (3)
# вызов с использованием цикла for
print ('Сгенерировать значения с помощью метода next ()')
для i в range_fun (3):
печать (я)
# генератор вызовов с использованием следующего метода
print ('Сгенерировать значения, используя метод цикла for')
печать (далее (у))
печать (далее (у))
печать (далее (у))
print (next (y)) # Будет сгенерировано исключение Stop Iteration
Бывший: Функция генератора для ряда Фибоначчи
def fib_fun (n):х, у = 0, 1
в то время как х < n:
доход x
х, у = у, х + у
z = fib_fun (6) # объект-генератор
print ('Сгенерировать значения с помощью метода next ()')
печать (далее (г))
печать (далее (г))
печать (далее (г))
печать (далее (г))
печать (далее (г))
печать (далее (г))
print ('Сгенерировать значения, используя метод цикла for')
для i в fib_fun (6):
печать (я)
Бывший: Функция генератора для создания диапазона значений с заданными начальным и конечным значениями.
def my_range (начало, конец):текущий = начало
в то время как текущий < end:
текущая доходность
текущий + = 1
print ('Сгенерировать значения с помощью метода next ()')
число = мой_ диапазон (1,5)
печать (далее (числа))
печать (далее (числа))
печать (далее (числа))
печать (далее (числа))
print ('Сгенерировать значения, используя метод цикла for')
для числа в my_range (1,5):
печать (число)
Бывший: Генератор для умножения каждого числа (меньше числа) на число
def gen_mulby_num (макс, число):п = 0
в то время как n < max:
дать n * num
п + = 1
для i в gen_mulby_num (5,3):
печать (я)
Бывший: Генератор для поиска куба для диапазона значений
def gen_mulby_num (макс, число):п = 0
в то время как n < max:
дать n * num
п + = 1
для i в gen_mulby_num (5,3):
печать (я)
Бывший: несколько генераторов: найти квадрат четных чисел, образованных из числа
Генератор 1: генерировать четные значения из заданного числа
Генератор 2: генерировать квадратные числа из значений генератора1
def gen_even (м):п = 0
в то время как n < m:
если n% 2 == 0:
дать n
п + = 2
def gen_square (числа):
для числа в числах:
yield 2 * num
для n в gen_square (gen_even (15)):
печать (п)
Бывший: Несколько генераторов: создать ряд Фибначчи и добавить значение 10 к каждому числу.
Generator1: генерирует ряд Фибоначчи из заданного числа
Генератор2: сложите каждое число на 10 из генератора1
def gen_fib (n):х, у = 0, 1
в то время как х < n:
доход x
х, у = у, х + у
def gen_add_10 (числа):
для числа в числах:
доход 10 + число
для n в gen_add_10 (gen_fib (5)):
печать (п)
Понятия генератора:
Генераторные интерпретации похожи на понимания списков, где список использует квадратные скобки; здесь используются обычные круглые скобки.
Бывший:
nums = (i для i в диапазоне (10))печать (тип (числа))
печать (список (числа))
Разница между генератором и нормальной функцией:
- Генератор предоставляет значения, используя урожай ключевое слово, где обычная функция использует возвращаться ключевое слово
- Генератор запускается с того места, где он остановился, при следующем вызове. Обычная функция выполняет все операторы каждый раз.
- Генератор экономит память, поскольку возвращает по одному значению за раз. Таким образом, мы можем использовать его для генерации бесконечных значений.
Заключение:
Генератор очень полезен, когда мы обрабатываем огромные / большие данные. В данный момент он содержит только один фрагмент данных, а не целые данные. Концепция генераторов считается продвинутой концепцией в Python.