logo

Generatoare în Python

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).