En Generator i Python er en funktion, der returnerer en iterator ved hjælp af nøgleordet Yield. I denne artikel vil vi diskutere, hvordan generatorfunktionen fungerer i Python.
Generatorfunktion i Python
En generatorfunktion i Python er defineret som en normal funktion, men når den skal generere en værdi, gør den det med udbytte søgeord frem for at vende tilbage. Hvis kroppen af en def indeholder udbytte, bliver funktionen automatisk til en Python-generatorfunktion.
Opret en generator i Python
I Python kan vi oprette en generatorfunktion ved blot at bruge nøgleordet def og nøgleordet yield. Generatoren har følgende syntaks i Python :
def function_name(): yield statement>
Eksempel:
I dette eksempel vil vi skabe en simpel generator, der vil give tre heltal. Så vil vi udskrive disse heltal ved at bruge Python for sløjfe .
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)> |
>
>
Produktion:
1 2 3>
Generatorobjekt
Python Generator-funktioner returnerer et generatorobjekt, der kan itereres, dvs. kan bruges som et Iterator . Generatorobjekter bruges enten ved at kalde den næste metode for generatorobjektet eller ved at bruge generatorobjektet i en for-in-løkke.
Eksempel:
I dette eksempel vil vi oprette en simpel generatorfunktion i Python til at generere objekter ved hjælp af next() funktion .
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))> |
>
>
Produktion:
1 2 3>
Eksempel:
I dette eksempel vil vi oprette to generatorer til Fibonacci-numre, først en simpel generator og anden generator ved hjælp af en for sløjfe .
Python3
alfabet og tal
# 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)> |
>
>
Produktion:
0 1 1 2 3 Using for in loop 0 1 1 2 3>
Python Generator udtryk
I Python er generatorudtryk en anden måde at skrive generatorfunktionen på. Den bruger Python listeforståelse teknik, men i stedet for at gemme elementerne i en liste i hukommelsen, opretter den generatorobjekter.
Generatorudtrykssyntaks
Generatorudtrykket i Python har følgende syntaks:
(expression for item in iterable)>
Eksempel:
I dette eksempel vil vi oprette et generatorobjekt, der vil udskrive multiplerne af 5 mellem 0 til 5, som også er delelige 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)> |
>
>
Produktion:
0 10 20>
Anvendelser af generatorer i Python
Antag, at vi skaber en strøm af Fibonacci-numre, ved at anvende generatortilgangen gør det trivielt; vi skal bare ringe til next(x) for at få det næste Fibonacci-nummer uden at bekymre os om, hvor eller hvornår strømmen af tal slutter. En mere praktisk form for strømbehandling er at håndtere store datafiler såsom logfiler. Generatorer giver en pladseffektiv metode til sådan databehandling, da kun dele af filen håndteres på et givet tidspunkt. Vi kan også bruge Iteratorer til disse formål, men Generator giver en hurtig måde (Vi behøver ikke at skrive __next__ og __iter__ metoder her).