Hvad er generatorer i Python, og hvordan bruges de?



Lær, hvad der er generatorer i Python sammen med fordelene. Lær også, hvordan du opretter og bruger dem sammen med forskellige brugssager.

Generering af iterables eller objekter, der tillader at træde over dem, betragtes som en byrdefuld opgave. Men i , implementeringen af ​​denne smertefulde opgave bliver bare rigtig glat. Så lad os gå videre og se nærmere på Generatorer i Python.

Her er en liste over alle de emner, der er omfattet af denne artikel:





Så lad os begynde. :)

Hvad er generatorer i Python?

Generatorer er dybest set funktioner, der returnerer gennemsigtige objekter eller genstande. Disse funktioner producerer ikke alle varerne på én gang, men de producerer dem en ad gangen og kun når det er nødvendigt. Når den er inkluderet for at gentage over et sæt emner, køres en generatorfunktion. Generatorer har også en række fordele.



Fordele ved at bruge generatorer

  • Uden generatorer i Python er det ekstremt vanskeligt og langvarigt at producere iterables.

  • Generatorer, der er lette at implementere, da de automatisk implementerer __iter __ (), __next __ () og StopIteration, som ellers skal specificeres specifikt.



  • Hukommelse gemmes, når varerne produceres, når det er nødvendigt, i modsætning til normalt . Denne kendsgerning bliver meget vigtig, når du har brug for at oprette et stort antal iteratorer. Dette betragtes også som den største fordel ved generatorer.

    sæt klassesti til java
  • Kan bruges til at producere et uendeligt antal varer.

  • De kan også bruges til at pipeline en række operationer

Normale funktioner vs generatorfunktioner:

Generatorer i Python oprettes ligesom hvordan du opretter ved hjælp af 'def' nøgleordet. Men generatorfunktioner gør brug af udbytte nøgleordet i stedet for afkast. Dette gøres for at underrette tolken om, at dette er en iterator. Ikke kun dette, Generatorfunktioner køres, når den næste () funktion kaldes og ikke efter deres navn som i tilfælde af normale funktioner. Overvej følgende eksempel for at forstå det bedre:

EKSEMPEL:

def func (a): giver a a = [1,2,3] b = func (a) næste (b)

PRODUKTION: [1, 2, 3]

Som du kan se, i ovenstående output, bruger func () udbytteordet og den næste funktion til dets udførelse. Men for normal funktion skal du bruge følgende kode:

EKSEMPEL:

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

PRODUKTION: [1, 2, 3]

Hvis du ser på eksemplet ovenfor, undrer du dig måske over, hvorfor du bruger en generatorfunktion, når den normale funktion også returnerer den samme output. Så lad os gå videre og se, hvordan du bruger generatorer i Python.

Brug af generatorfunktioner:

Som tidligere nævnt producerer generatorer i Python iterables en ad gangen. Se på følgende eksempel:

EKSEMPEL:

def myfunc (a): mens a> = 3: giver a a = a + 1 b = myfunc (a) print (b) næste (b)

Når du udfører følgende funktion, vil du se følgende output:

PRODUKTION: 4

Her er et iterabelt objekt returneret, der tilfredsstiller while-betingelsen. Efter udførelse overføres kontrollen til den, der ringer op. Hvis der er behov for flere emner, skal den samme funktion udføres igen ved at kalde den næste () funktion.

næste (b)

PRODUKTION: 5

Ved yderligere udførelser returnerer funktionen 6,7 osv. Generatorfunktioner i Python implementerer automatisk __iter __ () og __next __ (). Derfor kan du gentage objekterne ved blot at bruge den næste () metode. Når varegenerering skal afsluttes, implementerer generatorfunktioner StopIteration internt uden at skulle bekymre dig, der ringer op. Her er et andet eksempel på dette:

EKSEMPEL:

a = 2 def myfunc (a): mens a> = 0: giver a a - = 1 b = myfunc (a) print (b) næste (b)

PRODUKTION:

StopIteration-Generators i Python-EdurekaOvenstående billede viser udførelsen af ​​vores påkrævede antal gange. Hvis du prøver at ringe til den næste funktion igen, returnerer den en besked, der viser StopIteration er implementeret. Hvis du forsøger at gøre dette med normale funktioner, ændres eller gentages de returnerede værdier ikke. Se eksemplet nedenfor:

EKSEMPEL:

def z (): n = 1 udbytte n n = n + 3 udbytte n p = z () næste (p)

PRODUKTION:

Generatorer med sløjfer:

I tilfælde af at du vil udføre den samme funktion på én gang, kan du gøre brug af 'for' -sløjfen. Denne sløjfe hjælper med at gentage objekterne, og efter alle implementeringer udfører den StopIteration.

EKSEMPEL:

def z (): n = 1 udbytte n n = n + 3 udbytte n for x i z (): udskriv (x)

PRODUKTION:

en
4

Du kan også angive udtryk for at generere iterable objekter.

Generatorudtryk:

Du kan også bruge udtryk sammen med for-sløjfen til at producere iteratorer. Dette gør normalt generationens iterables meget let. Generatorudtryk ligner listeforståelser og lignende lambda-funktioner , generatorudtryk skaber anonyme generatorfunktioner.

Se eksemplet nedenfor:

EKSEMPEL:

a = interval (6) print ('List Comprehension', end = ':') b = [x + 2 for x i a] print (b) print ('Generator expression', end = ': n') c = (x + 2 for x i a) print (c) for y i c: print (y)

PRODUKTION:

Listeforståelse: [2, 3, 4, 5, 6, 7]

Generatorudtryk:

afslut et program i java

2
3
4
5
6

Som du kan se, i ovenstående output er det første udtryk en listeforståelse, der er angivet inden for [] parenteser. Listeforståelse producerer den komplette liste over emner på én gang. Det næste er et generatorudtryk, der returnerer de samme poster, men en ad gangen. Det specificeres ved hjælp af () parenteser.


Generatorfunktioner kan også bruges inden for andre funktioner.For eksempel:

EKSEMPEL:

a = interval (6) print ('Generator expression', end = ': n') c = (x + 2 for x i a) print (c) print (min (c))

PRODUKTION:

hvordan man finder array længde i javascript

Generatorudtryk
2

Ovenstående program udskriver minværdien, når ovenstående udtryk anvendes på værdierne for a.

Brug sager:

Lad os bruge generatorer i til:

  • Generer Fibonacci-serien
  • Generer numre

Genererer Fibonacci-serien:

Fibonacci-serien, som vi alle ved, er en række numre, hvor hvert nummer er en sum af de foregående to tal. De første to tal er 0 og 1. Her er et generatorprogram til generering af Fibonacci-serier:

EKSEMPEL:

def fibo (): første, anden = 0,1 mens Sand: giver første første, anden = anden, første + sekund for x i fibo (): hvis x> 50: break print (x, end = '')

PRODUKTION:

0 1 1 2 3 5 8 13 21 34

Ovenstående output viser Fibonacci-serien med værdier mindre end 50. Lad os nu se på, hvordan man genererer en liste med tal.

Generere numre:

Hvis du vil generere specificerede nummer på listen, kan du gøre det ved hjælp af generatorfunktioner. Se på følgende eksempel:

EKSEMPEL:

a = interval (10) b = (x for x i a) print (b) for y i b: print (y)

PRODUKTION:

0
en
2
3
4
5
6
7
8
9

EKSEMPEL:

a = interval (2,10,2) b = (x for x i a) print (b) for y i b: print (y)

PRODUKTION:


2
4
6
8

Ovenstående program har returneret lige tal fra 2 til 10. Dette bringer os til slutningen af ​​denne artikel om generatorer i Python. Jeg håber, du har forstået alle emnerne.

Sørg for at øve så meget som muligt, og vend din oplevelse tilbage.

Har du et spørgsmål til os? Nævn det i kommentarfeltet på denne 'Generatorer i Python' -blog, og vi vender tilbage til dig hurtigst muligt.

For at få dybtgående viden om Python sammen med dens forskellige applikationer kan du tilmelde dig live med 24/7 support og livstidsadgang.