Vad är generatorer i Python och hur man använder dem?



Lär dig vad som är generatorer i Python tillsammans med fördelarna. Lär dig också hur du skapar och använder dem tillsammans med olika användningsfall.

Att generera iterables eller objekt som gör det möjligt att gå över dem anses vara en betungande uppgift. Men i , genomförandet av denna smärtsamma uppgift blir bara riktigt smidig. Så låt oss gå vidare och titta närmare på Generators in Python.

Här är en lista över alla ämnen som omfattas av den här artikeln:





Så låt oss börja. :)

Vad är generatorer i Python?

Generatorer är i grunden funktioner som returnerar spårbara objekt eller objekt. Dessa funktioner producerar inte alla föremål samtidigt, utan de producerar dem en i taget och bara när det behövs. Närhelst ingår för att iterera över en uppsättning objekt körs en generatorfunktion. Generatorer har också ett antal fördelar.



Fördelar med att använda generatorer

  • Utan generatorer i Python är det extremt svårt och långvarigt att producera iterables.

  • Generatorer som är enkla att implementera eftersom de automatiskt implementerar __iter __ (), __next __ () och StopIteration som annars behöver anges specifikt.



  • Minne sparas när objekten produceras som det behövs, till skillnad från normalt . Detta faktum blir mycket viktigt när du behöver skapa ett stort antal iteratorer. Detta anses också vara den största fördelen med generatorer.

  • Kan användas för att producera ett oändligt antal artiklar.

  • De kan också användas för att leda ett antal operationer

Normala funktioner vs generatorfunktioner:

Generatorer i Python skapas precis som du skapar med hjälp av sökordet 'def'. Men Generator-funktioner använder avkastningsnyckelordet istället för avkastning. Detta görs för att meddela tolk att detta är en iterator. Inte bara detta, Generatorfunktioner körs när nästa () -funktion anropas och inte med deras namn som vid normala funktioner. Tänk på följande exempel för att förstå det bättre:

EXEMPEL:

vad är ide i java
def func (a): ge a a = [1,2,3] b = func (a) nästa (b)

PRODUKTION: [1, 2, 3]

Som du kan se, i ovanstående utgång använder func () avkastningsnyckelordet och nästa funktion för dess körning. Men för normal funktion behöver du följande kod:

EXEMPEL:

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

PRODUKTION: [1, 2, 3]

Om du tittar på exemplet ovan kanske du undrar varför man använder en generatorfunktion när den normala funktionen också ger samma utdata. Så låt oss gå vidare och se hur man använder Generators i Python.

Använda generatorfunktioner:

Som nämnts tidigare producerar generatorer i Python iterables en i taget. Ta en titt på följande exempel:

EXEMPEL:

def myfunc (a): medan a> = 3: ger a a = a + 1 b = myfunc (a) print (b) nästa (b)

När du utför följande funktion ser du följande utdata:

PRODUKTION: 4

Här har ett iterabelt objekt returnerats som uppfyller villkoret. Efter utförandet överförs kontrollen till den som ringer. Om fler objekt behövs måste samma funktion köras igen genom att anropa nästa () -funktion.

nästa (b)

PRODUKTION: 5

Vid ytterligare körningar returnerar funktionen 6,7 osv. Generatorfunktioner i Python implementerar metoderna __iter __ () och __next __ () automatiskt. Därför kan du itera över objekten genom att bara använda nästa () -metod. När artikelgenerering ska avslutas implementerar Generator-funktioner StopIteration internt utan att behöva oroa dig som ringer. Här är ett annat exempel på detta:

EXEMPEL:

a = 2 def myfunc (a): medan a> = 0: ger a a - = 1 b = myfunc (a) print (b) nästa (b)

PRODUKTION:

StopIteration-Generators i Python-EdurekaOvanstående bild visar hur många gånger vårt program krävs. Om du försöker ringa upp nästa funktion återkommer det ett meddelande som visar StopIteration har genomförts. Om du försöker göra detta med normala funktioner ändras eller återgår inte de returnerade värdena. Ta en titt på exemplet nedan:

EXEMPEL:

def z (): n = 1 utbyte n n = n + 3 utbyte n p = z () nästa (p)

PRODUKTION:

Generatorer med öglor:

Om du vill utföra samma funktion på en gång kan du använda 'för' -slingan. Den här slingan hjälper till att itera över objekten och efter alla implementeringar kör den StopIteration.

EXEMPEL:

def z (): n = 1 utbyte n n = n + 3 utbyte n för x i z (): skriv ut (x)

PRODUKTION:

ett
4

Du kan också ange uttryck för att skapa iterabla objekt.

Generatoruttryck:

Du kan också använda uttryck tillsammans med for-loop för att producera iteratorer. Detta gör vanligtvis generationens iterables mycket enkelt. Generatoruttryck liknar listförståelser och liknande lambda-funktioner , generatoruttryck skapar anonyma generatorfunktioner.

Ta en titt på exemplet nedan:

EXEMPEL:

a = intervall (6) print ('List Comprehension', end = ':') b = [x + 2 för x i a] print (b) print ('Generator expression', end = ': n') c = (x + 2 för x i a) tryck (c) för y i c: skriv ut (y)

PRODUKTION:

Listförståelse: [2, 3, 4, 5, 6, 7]

Generatoruttryck:

2
3
4
5
6

Som du kan se, i ovanstående utgång, är det första uttrycket en listförståelse som anges inom [] parenteser. Listförståelse producerar en komplett lista med objekt på en gång. Nästa är ett generatoruttryck som returnerar samma objekt men en i taget. Det anges med () parenteser.


Generatorfunktioner kan också användas inom andra funktioner.Till exempel:

EXEMPEL:

a = intervall (6) tryck ('Generatoruttryck', slut = ': n') c = (x + 2 för x i a) tryck (c) tryck (min (c))

PRODUKTION:

Generatoruttryck
2

Ovanstående program skriver ut minvärdet när ovanstående uttryck tillämpas på värdena för a.

Användningsfall:

Låt oss använda Generators i till:

  • Skapa Fibonacci-serien
  • Generera nummer

Genererar Fibonacci-serien:

Fibonacci-serien är som vi alla vet en serie med nummer där varje nummer är en summa av föregående två nummer. De två första siffrorna är 0 och 1. Här är ett generatorprogram för att generera Fibonacci-serien:

EXEMPEL:

def fibo (): första, andra = 0,1 medan True: ge första första, andra = andra, första + andra för x i fibo (): om x> 50: bryta utskrift (x, slut = '')

PRODUKTION:

0 1 1 2 3 5 8 13 21 34

Ovanstående output visar Fibonacci-serien med värden mindre än 50. Låt oss nu titta på hur man genererar en lista med siffror.

Generera nummer:

Om du vill skapa angivna listnummer kan du göra det med generatorfunktioner. Ta en titt på följande exempel:

EXEMPEL:

a = intervall (10) b = (x för x i a) tryck (b) för y i b: tryck (y)

PRODUKTION:

0
ett
2
3
4
5
6
7
8
9

EXEMPEL:

a = intervall (2,10,2) b = (x för x i a) tryck (b) för y i b: tryck (y)

PRODUKTION:


2
4
6
8

Ovanstående program har returnerat jämna siffror från 2 till 10. Detta leder oss till slutet av den här artikeln om generatorer i Python. Jag hoppas att du har förstått alla ämnen.

Se till att du tränar så mycket som möjligt och återgår till din upplevelse.

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen i den här 'Generators in Python' -bloggen så kommer vi tillbaka så snart som möjligt.

För att få fördjupad kunskap om Python tillsammans med dess olika applikationer kan du registrera dig för live med 24/7 support och livstidsåtkomst.