logo

Generatoren in Python

Een generator in Python is een functie die een iterator retourneert met behulp van het trefwoord Yield. In dit artikel bespreken we hoe de generatorfunctie in Python werkt.

Generatorfunctie in Python

Een generatorfunctie in Python wordt gedefinieerd als een normale functie, maar wanneer deze een waarde moet genereren, doet hij dit met de trefwoord opleveren in plaats van terug te keren. Als de hoofdtekst van een def yield bevat, wordt de functie automatisch een Python-generatorfunctie.



Maak een generator in Python

In Python kunnen we een generatorfunctie maken door simpelweg het trefwoord def en het trefwoord yield te gebruiken. De generator heeft de volgende syntaxis Python :

def function_name():  yield statement>

Voorbeeld:

In dit voorbeeld maken we een eenvoudige generator die drie gehele getallen oplevert. Vervolgens zullen we deze gehele getallen afdrukken met behulp van Python for loop .



Python3






converteer naar string-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)>

>

>

Uitgang:

1 2 3>

Generatorobject

Python Generator-functies retourneren een generatorobject dat itereerbaar is, dat wil zeggen dat het kan worden gebruikt als een Iterator . Generatorobjecten worden gebruikt door de volgende methode van het generatorobject aan te roepen of door het generatorobject in een for in-lus te gebruiken.

Voorbeeld:

In dit voorbeeld maken we een eenvoudige generatorfunctie in Python om objecten te genereren met behulp van de volgende() functie .

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

>

>

Uitgang:

1 2 3>

Voorbeeld:

In dit voorbeeld maken we twee generatoren voor Fibonacci-getallen, eerst een eenvoudige generator en een tweede generator met behulp van a for loop .

Python3




c reeks tekenreeksen

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

>

>

Uitgang:

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

Python Generator-expressie

In Python is generatorexpressie een andere manier om de generatorfunctie te schrijven. Het maakt gebruik van de Python lijst begrip techniek, maar in plaats van de elementen in een lijst in het geheugen op te slaan, worden er generatorobjecten gemaakt.

Syntaxis van generatorexpressie

De generatorexpressie in Python heeft de volgende syntaxis:

(expression for item in iterable)>

Voorbeeld:

In dit voorbeeld maken we een generatorobject dat de veelvouden van 5 afdrukt tussen het bereik van 0 tot 5, die ook deelbaar zijn door 2.

Python3




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

>

>

java char naar int

Uitgang:

0 10 20>

Toepassingen van generatoren in Python

Stel dat we een stroom Fibonacci-getallen creƫren, dan wordt het triviaal door de generatorbenadering toe te passen; we hoeven alleen maar next(x) te bellen om het volgende Fibonacci-nummer te krijgen zonder ons zorgen te maken over waar of wanneer de stroom getallen eindigt. Een praktischer type streamverwerking is het verwerken van grote gegevensbestanden, zoals logbestanden. Generatoren bieden een ruimte-efficiƫnte methode voor dergelijke gegevensverwerking, aangezien slechts delen van het bestand op een bepaald tijdstip worden verwerkt. We kunnen ook Iterators voor deze doeleinden gebruiken, maar Generator biedt een snelle manier (we hoeven hier geen __next__ en __iter__ methoden te schrijven).