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



Узнайте, что такое генераторы в Python, а также их преимущества. Также узнайте, как создавать и использовать их вместе с различными вариантами использования.

Создание итераций или объектов, позволяющих переступить через них, считается обременительной задачей. Но в , реализация этой болезненной задачи становится действительно гладкой. Итак, давайте поближе познакомимся с генераторами в Python.

Вот список всех тем, затронутых в этой статье:





Итак, приступим. :)

Что такое генераторы в Python?

Генераторы - это в основном функции, возвращающие перемещаемые объекты или элементы. Эти функции не производят все элементы сразу, а производят их по одному и только тогда, когда это необходимо. Когда бы включен для перебора набора элементов, запускается функция генератора. Генераторы также имеют ряд преимуществ.



Преимущества использования генераторов

  • Без генераторов в Python создание итераций чрезвычайно сложно и долго.

  • Генераторы легко реализовать, поскольку они автоматически реализуют __iter __ (), __next __ () и StopIteration, которые в противном случае необходимо указать явно.



  • Память сохраняется, поскольку изделия производятся по мере необходимости, в отличие от обычных . Этот факт становится очень важным, когда нужно создать огромное количество итераторов. Это также считается самым большим преимуществом генераторов.

  • Может использоваться для производства бесконечного количества предметов.

  • Их также можно использовать для конвейерной обработки ряда операций.

Нормальные функции против функций генератора:

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

ПРИМЕР:

что такое __init__
def func (a): вывести a a = [1,2,3] b = func (a) next (b)

ВЫВОД: [1, 2, 3]

Как вы можете видеть, в приведенном выше выводе func () использует ключевое слово yield и следующую функцию для своего выполнения. Но для нормальной работы вам понадобится следующий фрагмент кода:

ПРИМЕР:

def func (a): вернуть a = [1,2,3] func (a)

ВЫВОД: [1, 2, 3]

Если вы посмотрите на приведенный выше пример, вам может быть интересно, зачем использовать функцию генератора, если обычная функция также возвращает тот же результат. Итак, давайте продолжим и посмотрим, как использовать генераторы в Python.

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

Как упоминалось ранее, генераторы в Python создают итерации по одному. Взгляните на следующий пример:

ПРИМЕР:

def myfunc (a): while a> = 3: yield a = a + 1 b = myfunc (a) print (b) next (b)

Когда вы выполните следующую функцию, вы увидите следующий результат:

ВЫВОД: 4

Здесь был возвращен один повторяемый объект, удовлетворяющий условию while. После выполнения управление передается вызывающей стороне. В случае, если требуется больше элементов, ту же функцию нужно выполнить снова, вызвав функцию next ().

следующий (б)

ВЫВОД: 5

При дальнейшем выполнении функция вернет 6,7 и т. Д. Функции генератора в Python автоматически реализуют методы __iter __ () и __next __ (). Следовательно, вы можете перебирать объекты, просто используя метод next (). Когда генерация элемента должна завершиться, функции генератора реализуют StopIteration внутренне, не беспокоя вызывающего абонента. Вот еще один пример этого:

ПРИМЕР:

a = 2 def myfunc (a): while a> = 0: yield a a - = 1 b = myfunc (a) print (b) next (b)

ВЫВОД:

Генераторы StopIteration в Python-EdurekaНа изображении выше показано выполнение нашей программы необходимое количество раз. Если вы попытаетесь снова вызвать следующую функцию, она вернет сообщение с изображением StopIteration был реализован. Если вы попытаетесь сделать это с помощью обычных функций, возвращаемые значения не изменятся и не будут повторяться. Взгляните на пример ниже:

ПРИМЕР:

def z (): n = 1 вывести n n = n + 3 вывести n p = z () next (p)

ВЫВОД:

как установить путь Java в окнах

Генераторы с петлями:

Если вы хотите выполнить одну и ту же функцию сразу, вы можете использовать цикл for. Этот цикл помогает перебирать объекты и после всех реализаций выполняет StopIteration.

ПРИМЕР:

def z (): n = 1 yield n n = n + 3 yield n для x в z (): print (x)

ВЫВОД:

один
4

Вы также можете указать выражения для создания повторяемых объектов.

Выражения генератора:

Вы также можете использовать выражения вместе с циклом for для создания итераторов. Обычно это значительно упрощает создание итераций. Выражение генератора похоже на понимание списка и т.п. лямбда-функции , выражения генератора создают анонимные функции генератора.

Взгляните на пример ниже:

ПРИМЕР:

a = range (6) print ('Понимание списка', end = ':') b = [x + 2 вместо x в a] print (b) print ('Генераторное выражение', end = ': n') c = (x + 2 для x в a) print (c) для y в c: print (y)

ВЫВОД:

Понимание списка: [2, 3, 4, 5, 6, 7]

Выражение генератора:

2
3
4
5
6

Как вы можете видеть, в приведенном выше выводе первое выражение - это понимание списка, которое указано в скобках []. Понимание списка дает сразу полный список элементов. Следующее - выражение генератора, которое возвращает одни и те же элементы, но по одному. Он указывается в квадратных скобках ().


Генераторфункции можно использовать и в других функциях.Например:

ПРИМЕР:

a = range (6) print ('Генераторное выражение', end = ': n') c = (x + 2 для x в a) print (c) print (min (c))

ВЫВОД:

Выражение генератора
2

Вышеупомянутая программа печатает минимальное значение, когда приведенное выше выражение применяется к значениям a.

Сценарии использования:

Давайте использовать Генераторы в кому:

  • Сгенерировать ряды Фибоначчи
  • Генерация чисел

Создание рядов Фибоначчи:

Ряд Фибоначчи, как мы все знаем, представляет собой ряд чисел, каждое из которых представляет собой сумму двух предыдущих чисел. Первые два числа - 0 и 1. Вот программа-генератор для генерации рядов Фибоначчи:

ПРИМЕР:

def fibo (): first, second = 0,1 while True: вывести first first, second = second, first + second для x в fibo (): if x> 50: break print (x, end = '')

ВЫВОД:

0 1 1 2 3 5 8 13 21 34

Приведенный выше вывод показывает ряд Фибоначчи со значениями меньше 50. Давайте теперь посмотрим, как создать список чисел.

Генерация чисел:

Если вы хотите сгенерировать указанные номера списка, вы можете сделать это с помощью функций генератора. Взгляните на следующий пример:

ПРИМЕР:

a = range (10) b = (x вместо x в a) print (b) для y в b: print (y)

ВЫВОД:

0
один
2
3
4
5
6
7
8
9

ПРИМЕР:

a = range (2,10,2) b = (x для x в a) print (b) для y в b: print (y)

ВЫВОД:


2
4
6
8

Вышеупомянутая программа вернула четные числа от 2 до 10. На этом мы подошли к концу статьи о генераторах в Python. Надеюсь, вы поняли все темы.

Убедитесь, что вы как можно больше тренируетесь и верните свой опыт.

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев этого блога «Генераторы в Python», и мы свяжемся с вами в ближайшее время.

java что такое переменная экземпляра

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