Generátor v Pythonu je funkce, která vrací iterátor pomocí klíčového slova Yield. V tomto článku probereme, jak funguje funkce generátoru v Pythonu.
Funkce generátoru v Pythonu
Funkce generátoru v Pythonu je definována jako normální funkce, ale kdykoli potřebuje vygenerovat hodnotu, udělá to pomocí klíčové slovo výnos než se vrátit. Pokud tělo def obsahuje výnos, funkce se automaticky stane funkcí generátoru Pythonu.
Vytvořte generátor v Pythonu
V Pythonu můžeme vytvořit funkci generátoru jednoduše pomocí klíčových slov def a yield. Generátor má následující syntaxi Krajta :
def function_name(): yield statement>
Příklad:
V tomto příkladu vytvoříme jednoduchý generátor, který dá tři celá čísla. Poté tato celá čísla vytiskneme pomocí Pythonu pro smyčku .
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)> |
>
>
Výstup:
1 2 3>
Objekt generátoru
Funkce generátoru Pythonu vracejí objekt generátoru, který je iterovatelný, tj. lze jej použít jako Iterátor . Objekty generátoru se používají buď voláním další metody objektu generátoru, nebo použitím objektu generátoru ve smyčce for.
do while loop java
Příklad:
V tomto příkladu vytvoříme jednoduchou funkci generátoru v Pythonu pro generování objektů pomocí funkce next(). .
Python3
charakter.srovnej java
# 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))> |
>
>
Výstup:
1 2 3>
Příklad:
V tomto příkladu vytvoříme dva generátory pro Fibonacciho čísla, nejprve jednoduchý generátor a druhý generátor pomocí pro smyčku .
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)> |
>
>
Výstup:
0 1 1 2 3 Using for in loop 0 1 1 2 3>
Výraz generátoru Pythonu
V Pythonu je výraz generátoru dalším způsobem zápisu funkce generátoru. Používá Python porozumění seznamu ale místo ukládání prvků do seznamu v paměti vytváří objekty generátoru.
Syntaxe výrazu generátoru
Generátorový výraz v Pythonu má následující syntaxi:
(expression for item in iterable)>
Příklad:
V tomto příkladu vytvoříme objekt generátoru, který bude tisknout násobky 5 v rozsahu 0 až 5, které jsou také dělitelné 2.
Python3
# generator expression> generator_exp>=> (i>*> 5> for> i>in> range>(>5>)>if> i>%>2>=>=>0>)> > for> i>in> generator_exp:> >print>(i)> |
>
>
avl strom
Výstup:
0 10 20>
Aplikace generátorů v Pythonu
Předpokládejme, že vytvoříme proud Fibonacciho čísel, použití generátorového přístupu to udělá triviálním; stačí zavolat next(x), abychom získali další Fibonacciho číslo, aniž bychom se museli trápit tím, kde nebo kdy tok čísel skončí. Praktičtějším typem zpracování datových proudů je zpracování velkých datových souborů, jako jsou soubory protokolu. Generátory poskytují prostorově efektivní metodu pro takové zpracování dat, protože pouze části souboru jsou zpracovávány v jednom daném okamžiku. Pro tyto účely můžeme také použít Iterátory, ale Generátor poskytuje rychlý způsob (nemusíme zde psát metody __next__ a __iter__).