En Generator i Python är en funktion som returnerar en iterator med nyckelordet Yield. I den här artikeln kommer vi att diskutera hur generatorfunktionen fungerar i Python.
Generatorfunktion i Python
En generatorfunktion i Python definieras som en normal funktion, men när den behöver generera ett värde gör den det med yield nyckelord istället för att återvända. Om kroppen av en def innehåller avkastning, blir funktionen automatiskt en Python-generatorfunktion.
Skapa en generator i Python
I Python kan vi skapa en generatorfunktion genom att helt enkelt använda nyckelordet def och nyckelordet yield. Generatorn har följande syntax in Pytonorm :
def function_name(): yield statement>
Exempel:
I det här exemplet kommer vi att skapa en enkel generator som kommer att ge tre heltal. Sedan kommer vi att skriva ut dessa heltal genom att använda Python för slinga .
Python3
delsträng i 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)> |
>
>
Produktion:
1 2 3>
Generatorobjekt
Python Generator-funktioner returnerar ett generatorobjekt som är iterbart, det vill säga kan användas som ett Iterator . Generatorobjekt används antingen genom att anropa nästa metod för generatorobjektet eller genom att använda generatorobjektet i en for in loop.
Exempel:
I det här exemplet kommer vi att skapa en enkel generatorfunktion i Python för att generera objekt med hjälp av next() funktion .
Python3
binärt sökträd]
# 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>
Exempel:
I det här exemplet kommer vi att skapa två generatorer för Fibonacci Numbers, först en enkel generator och andra generator med en för slinga .
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)> |
>
>
Produktion:
0 1 1 2 3 Using for in loop 0 1 1 2 3>
Python Generator Expression
I Python är generatoruttryck ett annat sätt att skriva generatorfunktionen. Den använder Python listförståelse teknik men istället för att lagra elementen i en lista i minnet skapar den generatorobjekt.
Syntax för generatoruttryck
Generatoruttrycket i Python har följande syntax:
(expression for item in iterable)>
Exempel:
I det här exemplet kommer vi att skapa ett generatorobjekt som kommer att skriva ut multiplerna av 5 mellan 0 och 5 som också är delbara 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)> |
>
>
i java
Produktion:
0 10 20>
Applikationer av generatorer i Python
Anta att vi skapar en ström av Fibonacci-tal, att anta generatormetoden gör det trivialt; vi måste bara ringa next(x) för att få nästa Fibonacci-nummer utan att bry oss om var eller när strömmen av nummer slutar. En mer praktisk typ av strömbehandling är att hantera stora datafiler som loggfiler. Generatorer tillhandahåller en utrymmeseffektiv metod för sådan databehandling eftersom endast delar av filen hanteras vid en given tidpunkt. Vi kan också använda Iterators för dessa ändamål, men Generator erbjuder ett snabbt sätt (vi behöver inte skriva __next__ och __iter__ metoder här).