logo

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

Генератор у Python — це функція, яка повертає ітератор за допомогою ключового слова Yield. У цій статті ми обговоримо, як працює функція генератора в Python.

Функція генератора в Python

Функція генератора в Python визначається як звичайна функція, але щоразу, коли їй потрібно згенерувати значення, вона робить це за допомогою ключове слово yield а не повернення. Якщо тіло def містить yield, функція автоматично стає функцією генератора Python.



Створіть генератор на Python

У Python ми можемо створити функцію генератора, просто використовуючи ключові слова def і yield. Генератор має такий синтаксис Python :

def function_name():  yield statement>

приклад:

У цьому прикладі ми створимо простий генератор, який видаватиме три цілі числа. Потім ми надрукуємо ці цілі числа за допомогою Python для циклу .



Python3






# A generator function that yields 1 for first time,> # 2 second time and 3 third time> def> simpleGeneratorFun():> >yield> 1> >yield> 2> >yield> 3> > # Driver code to check above generator function> for> value>in> simpleGeneratorFun():> >print>(value)>

>

>

Вихід:

1 2 3>

Об'єкт генератора

Функції Python Generator повертають об’єкт генератора, який можна ітерувати, тобто можна використовувати як Ітератор . Об’єкти-генератори використовуються або шляхом виклику наступного методу об’єкта-генератора, або за допомогою об’єкта-генератора в циклі for in.

приклад:

У цьому прикладі ми створимо просту функцію генератора в Python для генерування об’єктів за допомогою функція next(). .

Python3




# A Python program to demonstrate use of> # generator object with next()> > # A generator function> def> simpleGeneratorFun():> >yield> 1> >yield> 2> >yield> 3> > # x is a generator object> x>=> simpleGeneratorFun()> > # Iterating over the generator object using next> > # In Python 3, __next__()> print>(>next>(x))> print>(>next>(x))> print>(>next>(x))>

>

javascript
>

Вихід:

1 2 3>

приклад:

У цьому прикладі ми створимо два генератори для чисел Фібоначчі: перший простий генератор, а другий — за допомогою a для циклу .

Python3




# A simple generator for Fibonacci Numbers> def> fib(limit):> > ># Initialize first two Fibonacci Numbers> >a, b>=> 0>,>1> > ># One by one yield next Fibonacci Number> >while> a yield a a, b = b, a + b # Create a generator object x = fib(5) # Iterating over the generator object using next # In Python 3, __next__() print(next(x)) print(next(x)) print(next(x)) print(next(x)) print(next(x)) # Iterating over the generator object using for # in loop. print(' Using for in loop') for i in fib(5): print(i)>

>

>

Вихід:

0 1 1 2 3  Using for in loop 0 1 1 2 3>

Вираз генератора Python

У Python вираз генератора є іншим способом написання функції генератора. Він використовує Python розуміння списку але замість того, щоб зберігати елементи в списку в пам’яті, він створює об’єкти-генератори.

Синтаксис виразу генератора

Вираз генератора в Python має такий синтаксис:

(expression for item in iterable)>

приклад:

У цьому прикладі ми створимо об’єкт-генератор, який друкуватиме числа, кратні 5, у діапазоні від 0 до 5, які також діляться на 2.

Python3




# generator expression> generator_exp>=> (i>*> 5> for> i>in> range>(>5>)>if> i>%>2>=>=>0>)> > for> i>in> generator_exp:> >print>(i)>

>

>

Вихід:

0 10 20>

Застосування генераторів на Python

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