Генератор у 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__).