logo

Generátory v Pythone

Generátor v Pythone je funkcia, ktorá vracia iterátor pomocou kľúčového slova Yield. V tomto článku budeme diskutovať o tom, ako funguje funkcia generátora v Pythone.

string.replaceall java

Funkcia generátora v Pythone

Funkcia generátora v Pythone je definovaná ako normálna funkcia, ale vždy, keď potrebuje vygenerovať hodnotu, urobí to pomocou kľúčové slovo výnos namiesto návratu. Ak telo def obsahuje výnos, funkcia sa automaticky stane funkciou generátora Pythonu.



Vytvorte generátor v Pythone

V Pythone môžeme vytvoriť funkciu generátora jednoduchým použitím kľúčových slov def a yield. Generátor má nasledujúcu syntax v Python :

def function_name():  yield statement>

Príklad:

V tomto príklade vytvoríme jednoduchý generátor, ktorý poskytne tri celé čísla. Potom vytlačíme tieto celé čísla pomocou Pythonu pre sluč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ýkon:

1 2 3>

Objekt generátora

Funkcie generátora Pythonu vracajú objekt generátora, ktorý je iterovateľný, t. j. možno ho použiť ako Iterátor . Objekty generátora sa používajú buď volaním ďalšej metódy objektu generátora alebo použitím objektu generátora v slučke for in.

Príklad:

V tomto príklade vytvoríme jednoduchú funkciu generátora v Pythone na generovanie objektov pomocou funkcia next(). .

Python3


powershell väčší alebo rovný



# 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ýkon:

1 2 3>

Príklad:

np.nuly

V tomto príklade vytvoríme dva generátory pre Fibonacciho čísla, prvý jednoduchý generátor a druhý generátor pomocou pre sluč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 jave

>

Výkon:

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

Výraz generátora Pythonu

V Pythone je výraz generátora ďalším spôsobom zápisu funkcie generátora. Používa Python porozumenie zoznamu ale namiesto ukladania prvkov do zoznamu v pamäti vytvára objekty generátora.

Syntax generátora výrazov

Generátorový výraz v Pythone má nasledujúcu syntax:

(expression for item in iterable)>

Príklad:

V tomto príklade vytvoríme objekt generátora, ktorý vytlačí násobky 5 v rozsahu od 0 do 5, ktoré sú tiež deliteľné 2.

Python3

java generiká




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

>

>

Výkon:

0 10 20>

Aplikácie generátorov v Pythone

Predpokladajme, že vytvoríme prúd Fibonacciho čísel, osvojením si generátorového prístupu to bude triviálne; stačí zavolať next(x), aby sme získali ďalšie Fibonacciho číslo bez toho, aby sme sa museli obťažovať, kde alebo kedy tok čísel skončí. Praktickejším typom spracovania toku je spracovanie veľkých dátových súborov, ako sú protokolové súbory. Generátory poskytujú priestorovo efektívnu metódu pre takéto spracovanie údajov, pretože v jednom danom časovom bode sa spracúvajú iba časti súboru. Na tieto účely môžeme použiť aj iterátory, ale generátor poskytuje rýchly spôsob (nemusíme tu písať metódy __next__ a __iter__).