Wat zijn generatoren in Python en hoe kunnen ze worden gebruikt?



Ontdek wat generatoren in Python zijn, samen met de voordelen. Leer ook hoe u ze kunt maken en gebruiken, samen met verschillende gebruiksscenario's.

Het genereren van iterables of objecten die het mogelijk maken eroverheen te stappen, wordt als een lastige taak beschouwd. Maar in , verloopt de uitvoering van deze pijnlijke taak gewoon heel soepel. Dus laten we doorgaan en Generators in Python eens nader bekijken.

Hier is een lijst met alle onderwerpen die in dit artikel worden behandeld:





wat is vector in java

Dus laten we beginnen. :)

Wat zijn generatoren in Python?

Generatoren zijn in feite functies die verplaatsbare objecten of items retourneren. Deze functies produceren niet alle items tegelijk, maar produceren ze een voor een en alleen wanneer dat nodig is. Wanneer het is opgenomen om een ​​reeks items te herhalen, wordt een generatorfunctie uitgevoerd. Generatoren hebben ook een aantal voordelen.



Voordelen van het gebruik van generatoren

  • Zonder generatoren in Python is het produceren van iterables buitengewoon moeilijk en langdurig.

  • Generatoren zijn eenvoudig te implementeren omdat ze automatisch __iter __ (), __next __ () en StopIteration implementeren die anders expliciet moeten worden gespecificeerd.



  • Het geheugen wordt opgeslagen terwijl de items worden geproduceerd zoals wanneer nodig, in tegenstelling tot normaal . Dit feit wordt erg belangrijk wanneer u een groot aantal iterators moet maken. Dit wordt ook beschouwd als het grootste voordeel van generatoren.

  • Kan worden gebruikt om een ​​oneindig aantal items te produceren.

  • Ze kunnen ook worden gebruikt om een ​​aantal bewerkingen te pijplijnen

Normale functies versus generatorfuncties:

Generatoren in Python worden op dezelfde manier gemaakt als hoe u maakt met het zoekwoord ‘def’. Maar generatorfuncties maken gebruik van het trefwoord yield in plaats van return. Dit wordt gedaan om de tolk te laten weten dat dit een iterator is. Niet alleen dit, Generator-functies worden uitgevoerd wanneer de functie next () wordt aangeroepen en niet met hun naam zoals in het geval van normale functies. Beschouw het volgende voorbeeld om het beter te begrijpen:

VOORBEELD:

def func (a): geef a a = [1,2,3] b = func (a) volgende (b)

UITGANG: [1, 2, 3]

Zoals je kunt zien, maakt func () in de bovenstaande uitvoer gebruik van het trefwoord yield en de volgende functie voor de uitvoering ervan. Maar voor een normale functie heeft u het volgende stuk code nodig:

VOORBEELD:

def func (a): retourneer a a = [1,2,3] func (a)

UITGANG: [1, 2, 3]

Als je naar het bovenstaande voorbeeld kijkt, vraag je je misschien af ​​waarom je een generatorfunctie moet gebruiken als de normale functie ook dezelfde uitvoer retourneert. Laten we dus verder gaan en kijken hoe we generatoren in Python kunnen gebruiken.

Generatorfuncties gebruiken:

Zoals eerder vermeld, produceren generatoren in Python iterables een voor een. Bekijk het volgende voorbeeld eens:

VOORBEELD:

def myfunc (a): while a> = 3: geef a a = a + 1 b = myfunc (a) print (b) volgende (b)

Als u de volgende functie uitvoert, ziet u de volgende uitvoer:

UITGANG: 4

Hier is één itereerbaar object geretourneerd dat voldoet aan de while-voorwaarde. Na uitvoering wordt de besturing overgedragen aan de beller. Als er meer items nodig zijn, moet dezelfde functie opnieuw worden uitgevoerd door de functie next () aan te roepen.

volgende (b)

UITGANG: 5

Bij verdere uitvoeringen retourneert de functie 6,7, enz. Generatorfuncties in Python implementeren de __iter __ () en __next __ () methoden automatisch. Daarom kunt u de objecten herhalen door alleen de methode next () te gebruiken. Wanneer het genereren van items moet worden beëindigd, implementeren Generator-functies het StopIteratie intern zonder de beller ongerust te maken. Hier is nog een voorbeeld hiervan:

VOORBEELD:

a = 2 def myfunc (a): terwijl a> = 0: geef a a - = 1 b = myfunc (a) print (b) volgende (b)

UITGANG:

StopIteratie-generatoren in Python-EdurekaDe bovenstaande afbeelding toont de uitvoering van ons programma vereist aantal keren. Als u de volgende functie opnieuw probeert aan te roepen, wordt een bericht geretourneerd met de afbeelding StopIteratie Is geïmplementeerd. Als u dit probeert te doen met normale functies, zullen de geretourneerde waarden niet veranderen of itereren. Bekijk het onderstaande voorbeeld eens:

VOORBEELD:

def z (): n = 1 opbrengst n n = n + 3 opbrengst n p = z () volgende (p)

UITGANG:

statische lidfunctie c ++

Generatoren met lussen:

Als u dezelfde functie in één keer wilt uitvoeren, kunt u gebruik maken van de ‘for’ -lus. Deze lus helpt bij het herhalen van de objecten en voert na alle implementaties StopIteration uit.

VOORBEELD:

def z (): n = 1 opbrengst n n = n + 3 opbrengst n voor x in z (): print (x)

UITGANG:

een
4

U kunt ook uitdrukkingen specificeren om itereerbare objecten te genereren.

Generator-uitdrukkingen:

U kunt ook uitdrukkingen samen met de for-lus gebruiken om iteratoren te produceren. Dit maakt het genereren van iterables meestal veel gemakkelijker. Generatoruitdrukking lijkt op lijstbegrip en dergelijke lambda-functies creëren generatoruitdrukkingen anonieme generatorfuncties.

Bekijk het onderstaande voorbeeld eens:

VOORBEELD:

a = range (6) print ('List Comprehension', end = ':') b = [x + 2 voor x in a] print (b) print ('Generator expression', end = ': n') c = (x + 2 voor x in a) print (c) voor y in c: print (y)

UITGANG:

Lijstbegrip: [2, 3, 4, 5, 6, 7]

Generator-uitdrukking:

2
3
4
5
6

Zoals u kunt zien, in de bovenstaande uitvoer, is de eerste uitdrukking een lijstbegrip dat tussen haakjes [] wordt gespecificeerd. Met lijstbegrip wordt de volledige lijst met items in één keer geproduceerd. De volgende is een generatoruitdrukking die dezelfde items een voor een retourneert. Het wordt gespecificeerd met () haakjes.


Generatorfuncties kunnen ook binnen andere functies worden gebruikt.Bijvoorbeeld:

VOORBEELD:

a = range (6) print ('Generator expression', end = ': n') c = (x + 2 voor x in a) print (c) print (min (c))

UITGANG:

Generator-uitdrukking
2

Het bovenstaande programma drukt de min-waarde af wanneer de bovenstaande uitdrukking wordt toegepast op de waarden van a.

Gebruiksgevallen:

Laten we generatoren gebruiken in naar:

  • Genereer Fibonacci-serie
  • Cijfers genereren

Fibonacci-serie genereren:

Zoals we allemaal weten, is de Fibonacci-reeks een reeks getallen waarin elk getal een som is van de voorgaande twee getallen. De eerste twee getallen zijn 0 en 1. Hier is een generatorprogramma om Fibonacci-reeksen te genereren:

VOORBEELD:

def fibo (): eerste, tweede = 0,1 while True: eerste eerste, tweede = tweede, eerste + tweede voor x in fibo (): als x> 50: break print (x, end = '')

UITGANG:

0 1 1 2 3 5 8 13 21 34

De bovenstaande uitvoer toont de Fibonacci-reeks met waarden kleiner dan 50. Laten we nu eens kijken hoe we een lijst met getallen kunnen genereren.

Cijfers genereren:

Als u gespecificeerde lijstnummers wilt genereren, kunt u dit doen met behulp van generatorfuncties. Bekijk het volgende voorbeeld eens:

VOORBEELD:

a = bereik (10) b = (x voor x in a) print (b) voor y in b: print (y)

UITGANG:

python klassen en objecten voorbeelden

0
een
2
3
4
5
6
7
8
9

VOORBEELD:

a = bereik (2,10,2) b = (x voor x in a) print (b) voor y in b: print (y)

UITGANG:


2
4
6
8

Het bovenstaande programma heeft even getallen van 2 tot 10 geretourneerd. Dit brengt ons bij het einde van dit artikel over generatoren in Python. Ik hoop dat je alle onderwerpen hebt begrepen.

Zorg ervoor dat je zoveel mogelijk oefent en terugkeert naar je ervaring.

Heeft u een vraag voor ons? Vermeld het in het commentaargedeelte van deze “Generators in Python” -blog en we nemen zo snel mogelijk contact met je op.

Om diepgaande kennis op te doen over Python en de verschillende applicaties, kunt u zich live inschrijven met 24/7 ondersteuning en levenslange toegang.