En Generator i Python er en funksjon som returnerer en iterator ved å bruke nøkkelordet Yield. I denne artikkelen vil vi diskutere hvordan generatorfunksjonen fungerer i Python.
Generatorfunksjon i Python
En generatorfunksjon i Python er definert som en vanlig funksjon, men når den trenger å generere en verdi, gjør den det med yield nøkkelord heller enn å returnere. Hvis kroppen til en def inneholder avkastning, blir funksjonen automatisk en Python-generatorfunksjon.
Lag en generator i Python
I Python kan vi lage en generatorfunksjon ved ganske enkelt å bruke nøkkelordet def og nøkkelordet yield. Generatoren har følgende syntaks i Python :
def function_name(): yield statement>
Eksempel:
I dette eksemplet vil vi lage en enkel generator som vil gi tre heltall. Deretter vil vi skrive ut disse heltallene ved å bruke Python for løkke .
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)> |
>
>
Produksjon:
1 2 3>
Generatorobjekt
Python Generator-funksjoner returnerer et generatorobjekt som er iterabelt, dvs. kan brukes som et Iterator . Generatorobjekter brukes enten ved å kalle neste metode for generatorobjektet eller ved å bruke generatorobjektet i en for-in-løkke.
Eksempel:
I dette eksemplet vil vi lage en enkel generatorfunksjon i Python for å generere objekter ved hjelp av neste() funksjon .
Python3
# 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))> |
>
>
Produksjon:
1 2 3>
Eksempel:
I dette eksemplet vil vi lage to generatorer for Fibonacci Numbers, først en enkel generator og andre generator ved hjelp av en for løkke .
Python3
alfabet og tall
# 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)> |
>
>
Produksjon:
0 1 1 2 3 Using for in loop 0 1 1 2 3>
Python Generator uttrykk
I Python er generatoruttrykk en annen måte å skrive generatorfunksjonen på. Den bruker Python listeforståelse teknikk, men i stedet for å lagre elementene i en liste i minnet, lager den generatorobjekter.
Syntaks for generatoruttrykk
Generatoruttrykket i Python har følgende syntaks:
(expression for item in iterable)>
Eksempel:
I dette eksemplet vil vi lage et generatorobjekt som vil skrive ut multiplene av 5 mellom 0 til 5, som også er delbare med 2.
Python3
# generator expression> generator_exp>=> (i>*> 5> for> i>in> range>(>5>)>if> i>%>2>=>=>0>)> > for> i>in> generator_exp:> >print>(i)> |
>
>
Produksjon:
0 10 20>
Applikasjoner av generatorer i Python
Anta at vi lager en strøm av Fibonacci-tall, ved å ta i bruk generatortilnærmingen gjør det trivielt; vi må bare ringe neste(x) for å få det neste Fibonacci-nummeret uten å bry oss om hvor eller når strømmen av tall slutter. En mer praktisk type strømbehandling er å håndtere store datafiler som loggfiler. Generatorer gir en plasseffektiv metode for slik databehandling ettersom bare deler av filen håndteres på et gitt tidspunkt. Vi kan også bruke iteratorer til disse formålene, men Generator gir en rask måte (vi trenger ikke å skrive __neste__ og __iter__ metoder her).