Mitä generaattorit ovat Pythonissa ja miten niitä käytetään?



Opi, mitkä ovat Pythonin generaattorit, sekä niiden edut. Opi myös luomaan ja käyttämään niitä yhdessä erilaisten käyttötapausten kanssa.

Kertomisten tai esineiden luominen, jotka mahdollistavat niiden ylittämisen, katsotaan raskaaksi tehtäväksi. Mutta, sisään , tämän tuskallisen tehtävän toteuttaminen sujuu todella sujuvasti. Joten mennään eteenpäin ja katsotaan tarkemmin Generaattorit Pythonissa.

Tässä on luettelo kaikista tämän artikkelin aiheista:





Joten aloitetaan. :)

Mitä generaattorit ovat Pythonissa?

Generaattorit ovat periaatteessa toimintoja, jotka palauttavat liikkuvia esineitä tai esineitä. Nämä toiminnot eivät tuota kaikkia kohteita kerralla, vaan ne tuottavat ne yksi kerrallaan ja vain tarvittaessa. Aina sisältyy toistamaan joukko kohteita, suoritetaan generaattoritoiminto. Generaattoreilla on myös useita etuja.



Generaattoreiden käytön edut

  • Ilman generaattoreita Pythonissa iterable-ohjelmien tuottaminen on erittäin vaikeaa ja pitkää.

  • Generaattorit on helppo toteuttaa, koska ne toteuttavat automaattisesti __iter __ (), __next __ () ja StopIteration, jotka muuten on määriteltävä erikseen.



  • Muisti tallennetaan, kun kohteet tuotetaan tarpeen mukaan, toisin kuin normaalisti . Tästä tosiasiasta tulee erittäin tärkeä, kun sinun on luotava valtava määrä iteraattoreita. Tätä pidetään myös generaattoreiden suurimpana etuna.

  • Voidaan käyttää loputtoman määrän esineiden tuottamiseen.

  • Niitä voidaan käyttää myös useiden toimintojen johtamiseen

Normaalitoiminnot vs. generaattorin toiminnot:

Generaattorit Pythonissa luodaan samalla tavalla kuin sinä käyttämällä def-avainsanaa. Generaattorin toiminnot käyttävät kuitenkin tuotto-avainsanaa tuoton sijaan. Tämä tehdään ilmoittamaan tulkille, että tämä on iteraattori. Ei vain tämä, generaattoritoiminnot suoritetaan, kun seuraava () -funktio kutsutaan, eikä niiden nimellä, kuten normaalien toimintojen tapauksessa. Harkitse seuraavaa esimerkkiä ymmärtääksesi sen paremmin:

ESIMERKKI:

def func (a): tuota a = [1,2,3] b = func (a) seuraava (b)

LÄHTÖ: [1, 2, 3]

Kuten näette, func () käyttää yllä olevassa lähdössä tuotto-avainsanaa ja seuraavaa toimintoa sen suorittamiseen. Mutta normaalia toimintaa varten tarvitset seuraavan koodinpätkän:

ESIMERKKI:

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

LÄHTÖ: [1, 2, 3]

Jos tarkastelet yllä olevaa esimerkkiä, saatat miettiä, miksi käyttää Generator-toimintoa, kun myös normaali toiminto palauttaa saman lähdön. Joten siirrytään eteenpäin ja katsotaan, miten generaattoreita käytetään Pythonissa.

Generaattorin toimintojen käyttäminen:

Kuten aiemmin mainittiin, Pythonin generaattorit tuottavat iterableja yksi kerrallaan. Katso seuraava esimerkki:

ESIMERKKI:

def myfunc (a): kun a> = 3: a = a + 1 b = myfunc (a) tulosta (b) seuraava (b)

Kun suoritat seuraavan toiminnon, näet seuraavan lähdön:

LÄHTÖ: 4

Täällä yksi iteroitavissa oleva kohde on palautettu while-ehdot täyttävä. Suorituksen jälkeen ohjaus siirretään soittajalle. Jos tarvitaan lisää kohteita, sama toiminto on suoritettava uudelleen kutsumalla seuraava () -funktio.

seuraava (b)

LÄHTÖ: 5

Seuraavissa suorituksissa funktio palauttaa 6,7 ​​jne. Pythonin generaattoritoiminnot toteuttavat __iter __ () ja __next __ () -menetelmät automaattisesti. Siksi voit iteroida objektien yli vain seuraavalla () -menetelmällä. Kun tuotekehityksen pitäisi päättyä, Generator-toiminnot toteuttavat StopIteration sisäisesti tarvitsematta huolehtia soittajasta. Tässä on toinen esimerkki tästä:

ESIMERKKI:

a = 2 def myfunc (a): kun a> = 0: a a = = 1 b = myfunc (a) tulosta (b) seuraava (b)

LÄHTÖ:

StopIteration-generaattorit Python-EdurekassaYllä oleva kuva näyttää ohjelman suorittamisen vaaditun määrän kertoja. Jos yrität soittaa seuraavaan toimintoon uudelleen, se palauttaa kuvaavan kuvan StopIteration on toteutettu. Jos yrität tehdä tämän tavallisilla toiminnoilla, palautetut arvot eivät muutu tai toistu. Katso seuraava esimerkki:

ESIMERKKI:

def z (): n = 1 tuotto n n = n + 3 saanto n p = z () seuraava (p)

LÄHTÖ:

mikä on skanneriluokka java

Silmukalla varustetut generaattorit:

Jos haluat suorittaa saman toiminnon kerralla, voit käyttää ”for” -silmukkaa. Tämä silmukka auttaa toistamaan objekteja ja kaikkien toteutusten jälkeen se suorittaa StopIteration.

ESIMERKKI:

def z (): n = 1 tuotto n n = n + 3 saanto n x: lle z: ssä (): tulosta (x)

LÄHTÖ:

yksi
4

Voit myös määrittää lausekkeita iteroitavien objektien luomiseksi.

Generaattorin lausekkeet:

Voit käyttää iteraattoreita myös lausekkeilla for for -silmukan kanssa. Tämä tekee sukupolven iteroinnit yleensä paljon helpommaksi. Generaattorin lauseke muistuttaa luettelon ymmärtämistä ja vastaavaa lambda-toiminnot , generaattorin lausekkeet luovat nimettömiä generaattoritoimintoja.

Katso seuraava esimerkki:

ESIMERKKI:

a = alue (6) tulosta ('Luettelon ymmärtäminen', loppu = ':') b = [x + 2 x: lle a] print (b) tulosta ('Generaattorin lauseke, loppu =': n ') c = (x + 2 x: lle a) tulosta (c) y: lle c: lle: tulosta (y)

LÄHTÖ:

Luettelon ymmärtäminen: [2, 3, 4, 5, 6, 7]

Generaattorin lauseke:

2
3
4
5
6

Kuten näette, yllä olevassa lähdössä ensimmäinen lauseke on luettelon ymmärtäminen, joka on määritelty sulkeissa []. Luettelon ymmärtäminen tuottaa täydellisen luettelon tuotteista kerralla. Seuraava on generaattorin lauseke, joka palauttaa samat kohteet mutta yksi kerrallaan. Se määritetään suluilla ().

cloudera -sertifioitu apache hadoop -kehittäjä


Generaattoritoimintoja voidaan käyttää myös muissa toiminnoissa.Esimerkiksi:

ESIMERKKI:

a = alue (6) tulosta ('Generaattorin lauseke', loppu = ': n') c = (x + 2 x: lle a) print (c) print (min (c))

LÄHTÖ:

Generaattorin lauseke
2

Yllä oleva ohjelma tulostaa min-arvon, kun yllä oleva lauseke on sovellettu a-arvoihin.

Käytä koteloita:

Käyttäkäämme generaattoreita sisään vastaanottajalle:

  • Luo Fibonacci-sarja
  • Numeroiden luominen

Fibonacci-sarjan luominen:

Fibonacci-sarja, kuten me kaikki tiedämme, on numerosarja, jossa jokainen luku on kahden edellisen luvun summa. Kaksi ensimmäistä numeroa ovat 0 ja 1. Tässä on generaattoriohjelma Fibonacci-sarjan luomiseksi:

ESIMERKKI:

def fibo (): ensimmäinen, toinen = 0,1, kun taas tosi: anna ensin ensimmäinen, toinen = toinen, ensimmäinen + toinen x: lle fibossa (): jos x> 50: katkoviiva (x, loppu = '')

LÄHTÖ:

0 1 1 2 3 5 8 13 21 34

Yllä oleva tulos näyttää Fibonacci-sarjan, jonka arvot ovat alle 50. Katsotaanpa nyt, miten luodaan luettelo numeroista.

Numeroiden luominen:

Jos haluat luoda määritetyt luettelonumerot, voit tehdä sen generaattoritoiminnoilla. Katso seuraava esimerkki:

ESIMERKKI:

a = alue (10) b = (x x: lle a) print (b) y: lle b: print (y)

LÄHTÖ:

0
yksi
2
3
4
5
6
7
8
9

ESIMERKKI:

a = alue (2,10,2) b = (x x: lle a) print (b) y: lle b: print (y)

LÄHTÖ:


2
4
6
8

Yllä oleva ohjelma on palauttanut parilliset numerot 2: sta 10. Tämä tuo meidät tämän Pythonin Generaattoreita koskevan artikkelin loppuun. Toivon, että olet ymmärtänyt kaikki aiheet.

Varmista, että harjoittelet mahdollisimman paljon ja palauta kokemuksesi.

Onko sinulla kysymys meille? Mainitse se tämän 'Generaattorit Pythonissa' -blogin kommenttiosassa ja otamme sinuun yhteyttä mahdollisimman pian.

Saadaksesi syvällistä tietoa Pythonista sen eri sovellusten kanssa, voit ilmoittautua livenä 24/7 -tuella ja käyttöikällä.