logo

Generaattorit Pythonissa

Pythonin generaattori on funktio, joka palauttaa iteraattorin käyttämällä Yield-avainsanaa. Tässä artikkelissa keskustelemme siitä, kuinka generaattoritoiminto toimii Pythonissa.

Generaattoritoiminto Pythonissa

Pythonissa generaattorifunktio määritellään normaaliksi funktioksi, mutta aina kun sen on luotava arvo, se tekee sen tuotto avainsana eikä palata. Jos def:n runko sisältää tuoton, funktiosta tulee automaattisesti Python-generaattorifunktio.



Luo generaattori Pythonissa

Pythonissa voimme luoda generaattorifunktion yksinkertaisesti käyttämällä def-avainsanaa ja tuottoavainsanaa. Generaattorissa on seuraava syntaksi Python :

def function_name():  yield statement>

Esimerkki:

hakkeroinnin käsittely

Tässä esimerkissä luomme yksinkertaisen generaattorin, joka tuottaa kolme kokonaislukua. Sitten tulostetaan nämä kokonaisluvut Pythonilla silmukalle .



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

>

>

Lähtö:

1 2 3>

Generaattoriobjekti

Python Generator -funktiot palauttavat generaattoriobjektin, joka on iteroitavissa, eli jota voidaan käyttää Iteraattori . Generaattoriobjekteja käytetään joko kutsumalla generaattoriobjektin seuraavaa menetelmää tai käyttämällä generaattoriobjektia for in -silmukassa.

Esimerkki:

Tässä esimerkissä luomme Pythonissa yksinkertaisen generaattorifunktion objektien luomiseksi käyttämällä next()-funktio .

Python 3


kuinka valita sarakkeita eri taulukoista sql:ssä



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

>

>

Lähtö:

1 2 3>

Esimerkki:

Tässä esimerkissä luomme kaksi Fibonacci-lukugeneraattoria, ensin yksinkertaisen generaattorin ja toisen generaattorin käyttämällä silmukalle .

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

Panda-sarjan ominaisuuksia
>

>

Lähtö:

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

Python Generator Expression

Pythonissa generaattorilauseke on toinen tapa kirjoittaa generaattorifunktio. Se käyttää Pythonia listan ymmärtäminen tekniikkaa, mutta sen sijaan, että se tallettaisi elementit luetteloon muistiin, se luo generaattoriobjekteja.

Generaattorin lausekkeen syntaksi

Pythonin generaattorilausekkeella on seuraava syntaksi:

java enums
(expression for item in iterable)>

Esimerkki:

Tässä esimerkissä luomme generaattoriobjektin, joka tulostaa 5:n kerrannaiset välillä 0-5, jotka ovat myös jaollisia kahdella.

Python 3




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

>

>

Lähtö:

0 10 20>

Generaattorien sovellukset Pythonissa

Oletetaan, että luomme Fibonacci-lukuvirran, jolloin generaattorilähestymistavan ottaminen käyttöön tekee siitä triviaalin; meidän on vain soitettava next(x):lle saadaksesi seuraavan Fibonacci-numeron ilman, että tarvitsemme huolta siitä, mihin tai milloin numerovirta päättyy. Käytännöllisempi virrankäsittelytapa on suurten tiedostojen, kuten lokitiedostojen, käsittely. Generaattorit tarjoavat tilaa säästävän menetelmän tällaiseen tietojenkäsittelyyn, koska vain osia tiedostosta käsitellään tiettynä ajankohtana. Voimme käyttää myös Iteraattoreita näihin tarkoituksiin, mutta Generator tarjoaa nopean tavan (Meidän ei tarvitse kirjoittaa __next__- ja __iter__-menetelmiä tähän).