Hva er generatorer i Python, og hvordan bruker jeg dem?



Lær hva som er generatorer i Python sammen med fordelene. Lær også hvordan du lager og bruker dem sammen med forskjellige brukssaker.

Å generere iterables eller objekter som tillater å tråkke over dem, anses å være en belastende oppgave. Men i blir implementeringen av denne smertefulle oppgaven veldig jevn. Så la oss gå videre og se nærmere på Generators in Python.

Her er en liste over alle emnene som dekkes i denne artikkelen:





Så la oss begynne. :)

Hva er generatorer i Python?

Generatorer er i utgangspunktet funksjoner som returnerer traverserbare gjenstander eller gjenstander. Disse funksjonene produserer ikke alle elementene på en gang, men de produserer dem en om gangen og bare når det er nødvendig. Når den er inkludert for å gjenta over et sett med elementer, kjøres en generatorfunksjon. Generatorer har også en rekke fordeler.



Fordeler med å bruke generatorer

  • Uten generatorer i Python er det ekstremt vanskelig og langvarig å produsere iterables.

  • Generatorer som er enkle å implementere da de automatisk implementerer __iter __ (), __next __ () og StopIteration som ellers må spesifiseres spesifikt.



  • Minne lagres når varene produseres når det er nødvendig, i motsetning til normalt . Dette faktum blir veldig viktig når du trenger å lage et stort antall iteratorer. Dette regnes også som den største fordelen med generatorer.

  • Kan brukes til å produsere et uendelig antall ting.

  • De kan også brukes til å rørlegge en rekke operasjoner

Normale funksjoner vs generatorfunksjoner:

Generatorer i Python er opprettet akkurat som hvordan du lager ved hjelp av ‘def’ nøkkelordet. Men generatorfunksjoner bruker avkastningsnøkkelordet i stedet for retur. Dette er gjort for å varsle tolken om at dette er en iterator. Ikke bare dette, Generator-funksjoner kjøres når neste () -funksjon kalles og ikke etter navn som i tilfelle normale funksjoner. Tenk på følgende eksempel for å forstå det bedre:

EKSEMPEL:

def func (a): gir a a = [1,2,3] b = func (a) neste (b)

PRODUKSJON: [1, 2, 3]

Som du kan se, i ovennevnte utgang, bruker func () avkastningsnøkkelordet og neste funksjon for utførelsen. Men for normal funksjon trenger du følgende kode:

EKSEMPEL:

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

PRODUKSJON: [1, 2, 3]

Hvis du ser på eksemplet ovenfor, lurer du kanskje på hvorfor du skal bruke en generatorfunksjon når normalfunksjonen også gir samme utgang. Så la oss gå videre og se hvordan du bruker Generators i Python.

Bruke generatorfunksjoner:

Som nevnt tidligere, produserer generatorer i Python iterables en om gangen. Ta en titt på følgende eksempel:

EKSEMPEL:

def myfunc (a): mens a> = 3: gir a a = a + 1 b = myfunc (a) utskrift (b) neste (b)

Når du utfører følgende funksjon, vil du se følgende utgang:

PRODUKSJON: 4

Her er en iterabel gjenstand returnert som tilfredsstiller mens-tilstanden. Etter utførelse overføres kontrollen til innringeren. Hvis flere ting er nødvendig, må den samme funksjonen utføres på nytt ved å ringe til neste () -funksjonen.

neste (b)

PRODUKSJON: 5

Ved ytterligere henrettelser vil funksjonen returnere 6,7 osv. Generatorfunksjoner i Python implementerer __iter __ () og __next __ () metodene automatisk. Derfor kan du itere over objektene ved å bare bruke neste () -metoden. Når varegenerering skal avsluttes, implementerer Generator-funksjoner StopIteration internt uten å måtte bekymre deg som ringer. Her er et annet eksempel på dette:

EKSEMPEL:

a = 2 def myfunc (a): mens a> = 0: gir a a - = 1 b = myfunc (a) print (b) neste (b)

PRODUKSJON:

StopIteration-Generators i Python-EdurekaOvenstående bilde viser gjennomføringen av programmet som kreves antall ganger. Hvis du prøver å ringe til neste funksjon igjen, returnerer den en melding som viser StopIteration er implementert. Hvis du prøver å gjøre dette med normale funksjoner, endres eller gjentas ikke verdiene som returneres. Ta en titt på eksemplet nedenfor:

EKSEMPEL:

def z (): n = 1 utbytte n n = n + 3 utbytte n p = z () neste (p)

PRODUKSJON:

hva er abstraksjon i c ++

Generatorer med sløyfer:

I tilfelle du vil utføre den samme funksjonen på en gang, kan du benytte deg av ‘for’ sløyfen. Denne sløyfen hjelper med å iterere over objektene, og etter alle implementeringer utfører den StopIteration.

EKSEMPEL:

def z (): n = 1 utbytte n n = n + 3 utbytte n for x i z (): skriv ut (x)

PRODUKSJON:

en
4

Du kan også spesifisere uttrykk for å generere iterable objekter.

Generatoruttrykk:

Du kan også bruke uttrykk sammen med for loop for å produsere iteratorer. Dette gjør vanligvis generasjonen iterables mye enkelt. Generatoruttrykk ligner listeforståelser og lignende lambda-funksjoner , genererer generatoruttrykk anonyme generatorfunksjoner.

Ta en titt på eksemplet nedenfor:

EKSEMPEL:

a = range (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) utskrift (c) for y i c: utskrift (y)

PRODUKSJON:

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

Generatoruttrykk:

2
3
4
5
6

Som du kan se, i ovennevnte utgang, er det første uttrykket en listeforståelse som er spesifisert innen [] parentes. Listeforståelse produserer den komplette listen over ting på en gang. Det neste er et generatoruttrykk som returnerer de samme elementene, men ett om gangen. Det spesifiseres ved hjelp av () parenteser.


Generatorfunksjoner kan også brukes i andre funksjoner.For eksempel:

EKSEMPEL:

a = rekkevidde (6) utskrift ('Generatoruttrykk', slutt = ': n') c = (x + 2 for x i a) utskrift (c) utskrift (min (c))

PRODUKSJON:

Generatoruttrykk
2

hva er en forekomst av en klasse i java

Ovennevnte program skriver ut minverdien når uttrykket ovenfor er brukt på verdiene til a.

Bruk tilfeller:

La oss bruke generatorer i til:

  • Generer Fibonacci-serien
  • Genererer tall

Genererer Fibonacci-serien:

Fibonacci-serien er som vi alle vet en serie med tall hvor hvert tall er en sum av de to foregående tallene. De to første tallene er 0 og 1. Her er et generatorprogram for å generere Fibonacci-serien:

EKSEMPEL:

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

PRODUKSJON:

0 1 1 2 3 5 8 13 21 34

Ovennevnte utgang viser Fibonacci-serien med verdier mindre enn 50. La oss nå se på hvordan du genererer en liste med tall.

Genererer tall:

I tilfelle du vil generere spesifiserte listernumre, kan du gjøre det ved hjelp av generatorfunksjoner. Ta en titt på følgende eksempel:

EKSEMPEL:

a = område (10) b = (x for x i a) utskrift (b) for y i b: utskrift (y)

PRODUKSJON:

0
en
2
3
4
5
6
7
8
9

EKSEMPEL:

a = område (2,10,2) b = (x for x i a) utskrift (b) for y i b: utskrift (y)

PRODUKSJON:


2
4
6
8

Ovennevnte program har returnert partall fra 2 til 10. Dette bringer oss til slutten av denne artikkelen om Generators in Python. Jeg håper du har forstått alle emnene.

Forsikre deg om at du trener så mye som mulig og tilbakestiller opplevelsen.

Har du spørsmål til oss? Vennligst nevn det i kommentarfeltet i denne 'Generators in Python' -bloggen, så kommer vi tilbake til deg så snart som mulig.

For å få grundig kunnskap om Python sammen med de forskjellige applikasjonene, kan du registrere deg for live med 24/7 support og levetidstilgang.