Un generator în Python este o funcție care returnează un iterator folosind cuvântul cheie Yield. În acest articol, vom discuta cum funcționează funcția generator în Python.
Funcția generator în Python
O funcție generatoare în Python este definită ca o funcție normală, dar ori de câte ori trebuie să genereze o valoare, o face cu randament cheie mai degrabă decât să se întoarcă. Dacă corpul unui def conține randament, funcția devine automat o funcție generatoare Python.
Creați un generator în Python
În Python, putem crea o funcție generatoare folosind pur și simplu cuvântul cheie def și cuvântul cheie yield. Generatorul are următoarea sintaxă în Piton :
def function_name(): yield statement>
Exemplu:
În acest exemplu, vom crea un generator simplu care va produce trei numere întregi. Apoi vom tipări aceste numere întregi folosind Python pentru buclă .
Python3
hashmap java
# 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)> |
>
>
Ieșire:
1 2 3>
Obiect generator
Funcțiile Python Generator returnează un obiect generator care este iterabil, adică poate fi folosit ca un Iterator . Obiectele generator sunt utilizate fie prin apelarea următoarei metode a obiectului generator, fie folosind obiectul generator într-o buclă for in.
Exemplu:
În acest exemplu, vom crea o funcție generatoare simplă în Python pentru a genera obiecte folosind funcția next(). .
Python3
o formă completă
# 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))> |
>
>
Ieșire:
1 2 3>
Exemplu:
subșirul java conține
În acest exemplu, vom crea doi generatori pentru numerele Fibonacci, mai întâi un generator simplu și al doilea generator folosind un pentru buclă .
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)> |
altfel java
>
>
Ieșire:
0 1 1 2 3 Using for in loop 0 1 1 2 3>
Python Generator Expressie
În Python, expresia generatorului este o altă modalitate de a scrie funcția generator. Folosește Python înțelegerea listei tehnică, dar în loc să stocheze elementele dintr-o listă în memorie, creează obiecte generatoare.
Sintaxa expresiei generatorului
Expresia generator în Python are următoarea sintaxă:
(expression for item in iterable)>
Exemplu:
În acest exemplu, vom crea un obiect generator care va tipări multiplii lui 5 între intervalul de la 0 la 5 care sunt, de asemenea, divizibili cu 2.
Python3
greierul meu viu
# generator expression> generator_exp>=> (i>*> 5> for> i>in> range>(>5>)>if> i>%>2>=>=>0>)> > for> i>in> generator_exp:> >print>(i)> |
>
>
Ieșire:
0 10 20>
Aplicații ale generatoarelor în Python
Să presupunem că creăm un flux de numere Fibonacci, adoptarea abordării generatorului îl face trivial; trebuie doar să apelăm următorul(x) pentru a obține următorul număr Fibonacci fără să ne mai chinuim unde sau când se termină fluxul de numere. Un tip mai practic de procesare a fluxului este gestionarea fișierelor mari de date, cum ar fi fișierele jurnal. Generatoarele oferă o metodă eficientă din punct de vedere al spațiului pentru o astfel de prelucrare a datelor, deoarece numai părți ale fișierului sunt gestionate la un moment dat. Putem folosi și iteratoare în aceste scopuri, dar Generator oferă o modalitate rapidă (nu este nevoie să scriem metodele __next__ și __iter__ aici).