Генератор Python

8 структур данных Python Программирование и разработка

8 структур данных Python

В этом разделе мы изучим Python Generator.

Определение : генератор похож на обычную функцию, которая генерирует диапазон значений с помощью ключевого слова yield. Он возвращает по одному объекту за раз. Он внутренне использует итератор. Для доступа к следующему элементу используется функция next (), или мы можем использовать ее для цикла. Если мы попытаемся получить доступ к значению за пределами диапазона, возникнет ошибка StopIteration.

Мы покажем примеры, чтобы лучше понять

Пример: функция генератора для диапазона значений

def range_fun(n):
= 
while x < n:
yield x
x += 1
= range_fun (3)

#call using for loop  
print(‘Generate values using next() method’)
for i in range_fun(3):
print(i)

#call generator using next method  
print(‘Generate values using for loop method’)
print(next(y))
print(next(y))
print(next(y))
print(next(y))#Stop Iteration exception will be raised

Пример : функция генератора для Fibonacci series

def fib_fun(n):
x, y = , 1
while x < n:
yield x
x, y = y, x + y

= fib_fun(6) #generator object  

print(‘Generate values using next() method’)
print(next(z))
print(next(z))
print(next(z))
print(next(z))
print(next(z))
print(next(z))

print(‘Generate values using for loop method’)
for i in fib_fun(6):
print(i)

Пример : функция генератора для создания диапазона значений с заданными начальными и конечными значениями.

def my_range(start, end):
current = start
while current < end:
yield current
current +=1
print(‘Generate values using next() method’)
nums = my_range(1,5)
print(next(nums))
print(next(nums))
print(next(nums))
print(next(nums))
print(‘Generate values using for loop method’)
for num in my_range(1,5):
print(num)

Пример : Генератор для умножения каждого числа (меньше числа) на число.

def my_range(start, end):
current = start
while current < end:
yield current
current +=1
print(‘Generate values using next() method’)
nums = my_range(1,5)
print(next(nums))
print(next(nums))
print(next(nums))
print(next(nums))
print(‘Generate values using for loop method’)
for num in my_range(1,5):
print(num)

Пример : Генератор для поиска куба для диапазона значений.

def gen_mulby_num(max,num):
= 
while n < max:
yield n * num
n += 1
for i in gen_mulby_num(5,3):
print(i)

Пример : несколько генераторов: найдите квадрат четных чисел, образованный из числа.

Генератор 1: генерировать четные значения из заданного числа

Генератор 2: генерировать квадратные числа из значений генератора1

def gen_even(m):
= 
while n < m:
if n % 2 == :
yield n
n += 2

def gen_square(nums):
for num in nums:
yield 2 * num

for n in gen_square(gen_even(15)):
print(n)

Пример : Несколько генераторов: создайте ряд Фибоначчи и добавьте значение 10 к каждому числу.

Генератор1: генерирует ряд Фибоначчи из заданного числа

Генератор2: сложите каждое число на 10 из генератора1

def gen_fib(n):
x, y = , 1
while x < n:
yield x
x, y = y, x + y

def gen_add_10(nums):
for num in nums:
yield 10 + num

for n in gen_add_10(gen_fib(5)):
print(n)

Понятия генератора:

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

Пример :

nums = (for i in range(10))
print(type(nums))
print(list(nums))

Разница между генератором и нормальной функцией:

  • Генератор предоставляет значения с использованием ключевого слова yield,где обычная функция использует ключевое слово return
  • При следующем вызове генератор запускается с того места, где он остановился. Обычная функция каждый раз выполняет все операторы.
  • Генератор экономит память, поскольку возвращает одно значение за раз. Таким образом, мы можем использовать его для генерации бесконечных значений.

Вывод

Генератор очень полезен, когда мы обрабатываем огромные / большие данные. В данный момент он содержит только один фрагмент данных, а не целые данные. Концепция генераторов считается продвинутой концепцией в Python. Python.

Читайте также:  Как создавать шаблоны Django?
Оцените статью
bestprogrammer.ru
Добавить комментарий