logo

Generadors en Python

Un generador en Python és una funció que retorna un iterador mitjançant la paraula clau Rendiment. En aquest article, parlarem de com funciona la funció del generador a Python.

Funció de generador en Python

Una funció generadora a Python es defineix com una funció normal, però sempre que necessita generar un valor, ho fa amb el paraula clau de rendiment en comptes de tornar. Si el cos d'una definició conté rendiment, la funció es converteix automàticament en una funció generadora de Python.



swing java

Creeu un generador en Python

A Python, podem crear una funció generadora simplement utilitzant la paraula clau def i la paraula clau yield. El generador té la sintaxi següent Python :

def function_name():  yield statement>

Exemple:

En aquest exemple, crearem un generador senzill que donarà tres nombres enters. A continuació, imprimirem aquests nombres enters utilitzant Python per bucle .



Python 3






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

>

>

com sortir d'un bucle while java

Sortida:

1 2 3>

Objecte generador

Les funcions del generador de Python retornen un objecte generador que és iterable, és a dir, que es pot utilitzar com a Iterador . Els objectes generador s'utilitzen ja sigui cridant al mètode següent de l'objecte generador o utilitzant l'objecte generador en un bucle for in.

Exemple:

En aquest exemple, crearem una funció generadora senzilla a Python per generar objectes mitjançant el funció next(). .

Python 3




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

>

>

Sortida:

1 2 3>

Exemple:

En aquest exemple, crearem dos generadors per als nombres de Fibonacci, primer un simple generador i un segon generador amb un per bucle .

Python 3




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

char a int java
>

>

Sortida:

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

Expressió del generador de Python

A Python, l'expressió del generador és una altra manera d'escriure la funció del generador. Utilitza el Python comprensió de llista però en lloc d'emmagatzemar els elements en una llista a la memòria, crea objectes generadors.

Sintaxi d'expressió del generador

L'expressió generadora en Python té la sintaxi següent:

(expression for item in iterable)>

Exemple:

En aquest exemple, crearem un objecte generador que imprimirà els múltiples de 5 entre el rang de 0 a 5 que també són divisibles per 2.

Python 3




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

gimp guardant com a jpeg

>

>

Sortida:

0 10 20>

Aplicacions dels generadors en Python

Suposem que creem un flux de nombres de Fibonacci, adoptar l'enfocament del generador el fa trivial; només hem de trucar a next(x) per obtenir el següent nombre de Fibonacci sense preocupar-nos d'on o quan acaba el flux de nombres. Un tipus més pràctic de processament de fluxos és gestionar fitxers de dades grans, com ara fitxers de registre. Els generadors proporcionen un mètode eficient en espai per al processament de dades, ja que només es gestionen parts del fitxer en un moment determinat. També podem utilitzar iteradors per a aquests propòsits, però Generator ofereix una manera ràpida (no necessitem escriure els mètodes __next__ i __iter__ aquí).