Kas yra „Python“ generatoriai ir kaip juos naudoti?



Sužinokite, kas yra „Python“ generatoriai, kartu su pranašumais. Taip pat sužinokite, kaip juos kurti ir naudoti kartu su įvairiais naudojimo atvejais.

Kartotinių ar objektų, leidžiančių peržengti juos, generavimas laikomas sunkia užduotimi. Tačiau , šios skausmingos užduoties įgyvendinimas tampa tikrai sklandus. Taigi eikime į priekį ir atidžiau pažvelkime į „Python“ generatorius.

Čia pateikiamos visų šiame straipsnyje aptariamų temų sąrašas:





Taigi pradėkime. :)

Kas yra „Python“ generatoriai?

Generatoriai iš esmės yra funkcijos, kurios grąžina praeinamus objektus ar daiktus. Šios funkcijos gamina ne visus daiktus vienu metu, o jas gamina po vieną ir tik tada, kai to reikia. Kai tik įtraukiamas kartoti elementų rinkinį, vykdoma generatoriaus funkcija. Generatoriai taip pat turi daug privalumų.



Generatorių naudojimo pranašumai

  • Be „Python“ sukurtų „Generatorių“ kartotinių kūrimas yra labai sudėtingas ir ilgas.

  • Generatorius lengva įdiegti, nes jie automatiškai įgyvendina __iter __ (), __next __ () ir StopIteration, kurie priešingu atveju turi būti aiškiai nurodyti.



  • Atmintis išsaugoma, kai daiktai gaminami taip, kaip reikia, skirtingai nei įprasta . Šis faktas tampa labai svarbus, kai reikia sukurti daugybę pakartotojų. Tai taip pat laikoma didžiausiu generatorių pranašumu.

  • Gali būti naudojamas begaliniam daiktų kiekiui gaminti.

  • Jie taip pat gali būti naudojami atliekant daugybę operacijų

Įprastos ir generatoriaus funkcijos:

„Python“ generatoriai yra sukurti taip pat, kaip ir jūs naudojant raktinį žodį „def“. Tačiau „Generator“ funkcijos naudoja grąžos raktinį žodį, o ne grąžą. Tai daroma norint pranešti vertėjui, kad tai yra iteratorius. Negana to, „Generator“ funkcijos vykdomos iškviečiant kitą () funkciją, o ne jų vardu, kaip įprastų funkcijų atveju. Apsvarstykite šį pavyzdį, kad jį geriau suprastumėte:

PAVYZDYS:

java kas yra žetonas
def func (a): gaunama a = [1,2,3] b = func (a) kita (b)

IŠĖJIMAS: [1, 2, 3]

Kaip matote, aukščiau pateiktame išvestyje func () naudoja jo derinimo raktinį žodį ir kitą funkciją. Bet, norint normaliai funkcionuoti, jums reikės šio kodo:

PAVYZDYS:

def func (a): grąžinkite a = [1,2,3] func (a)

IŠĖJIMAS: [1, 2, 3]

Jei pažvelgsite į pirmiau pateiktą pavyzdį, jums gali būti įdomu, kodėl naudoti „Generator“ funkciją, kai įprasta funkcija taip pat pateikia tą patį išėjimą. Taigi eikime toliau ir pažiūrėkime, kaip naudoti „Python“ generatorius.

„Generator“ funkcijų naudojimas:

Kaip minėta anksčiau, „Python“ generatoriai gamina kartojamus elementus po vieną. Pažvelkite į šį pavyzdį:

PAVYZDYS:

def myfunc (a): o a> = 3: gauti a = a + 1 b = myfunc (a) spausdinti (b) kitas (b)

Vykdydami šią funkciją pamatysite tokį išėjimą:

IŠĖJIMAS: 4

Čia buvo grąžintas vienas kartojamas objektas, tenkinantis sąlygą while. Po įvykdymo kontrolė perduodama skambinančiajam. Jei reikia daugiau elementų, tą pačią funkciją reikia atlikti dar kartą iškviečiant kitą () funkciją.

kitas (b)

IŠĖJIMAS: 5

Vykdant kitas funkcijas, funkcija grąžins 6,7 ir kt. „Python“ generatoriaus funkcijos automatiškai įgyvendina metodus __iter __ () ir __next __ (). Todėl galite kartoti objektus, naudodami tik kitą () metodą. Kai elementų generavimas turėtų būti nutrauktas, „Generator“ funkcijos įgyvendina StopIteration viduje, nesijaudindami skambinančiojo. Štai dar vienas to pavyzdys:

PAVYZDYS:

a = 2 def myfunc (a): o a> = 0: gaunama a - = 1 b = myfunc (a) spausdinti (b) kita (b)

IŠĖJIMAS:

„StopIteration-Generators“ „Python-Edureka“Aukščiau pateiktame paveikslėlyje parodyta, kiek kartų reikia atlikti mūsų programą. Jei bandysite dar kartą paskambinti į kitą funkciją, ji pateiks pranešimą, kuriame pavaizduota StopIteration buvo įgyvendinta. Jei bandysite tai padaryti naudodamiesi įprastomis funkcijomis, grąžintos vertės nepasikeis ir nepasikartos. Pažvelkite į toliau pateiktą pavyzdį:

PAVYZDYS:

def z (): n = 1 išeiga n n = n + 3 išeiga n p = z () kitas (p)

IŠĖJIMAS:

Generatoriai su kilpomis:

Jei norite tą pačią funkciją atlikti vienu metu, galite naudoti kilpą „už“. Ši kilpa padeda kartoti objektus ir po visų įdiegimų vykdo „StopIteration“.

PAVYZDYS:

def z (): n = 1 derlius n n = n + 3 derlius n x x z (): spausdinti (x)

IŠĖJIMAS:

vienas
4

Taip pat galite nurodyti išraiškas, kad generuotumėte kartojamus objektus.

Generatoriaus išraiškos:

Taip pat galite naudoti išraiškas kartu su for ciklu, kad sudarytumėte iteratorius. Tai paprastai leidžia kartoti kartojamas kartas daug lengviau. Generatoriaus išraiška panaši į sąrašo supratimą ir panašiai lambda funkcijos , generatoriaus išraiškos sukuria anonimines generatoriaus funkcijas.

Pažvelkite į toliau pateiktą pavyzdį:

PAVYZDYS:

a = range (6) print ('Sąrašo supratimas', pabaiga = ':') b = [x + 2 x x a] print (b) print ('Generator express, end =': n ') c = (x + 2 x x a) spausdinti (c) y y c: spausdinti (y)

IŠĖJIMAS:

Sąrašo supratimas: [2, 3, 4, 5, 6, 7]

Generatoriaus išraiška:

taikymo srities operatorius c ++

2
3
4
5
6

Kaip matote, pirmiau pateiktame išvestyje pirmoji išraiška yra sąrašo supratimas, nurodytas skliausteliuose. Sąrašo supratimas sukuria visą elementų sąrašą vienu metu. Kitas yra generatoriaus išraiška, kuri grąžina tuos pačius elementus, bet po vieną. Jis nurodomas naudojant () skliausteliuose.


Generatoriusfunkcijos gali būti naudojamos ir kitose funkcijose.Pavyzdžiui:

PAVYZDYS:

a = diapazonas (6) spausdinimas („Generatoriaus išraiška“, pabaiga = ': n') c = (x + 2 x x a) print (c) print (min (c))

IŠĖJIMAS:

Generatoriaus išraiška
2

Pirmiau minėta programa atspausdina min reikšmę, kai aukščiau nurodyta išraiška taikoma a reikšmėms.

Naudojimo atvejai:

Panaudokime „Generators“ į:

  • Generuoti „Fibonacci“ serijas
  • Skaičių generavimas

„Fibonacci“ serijos generavimas:

„Fibonači“ serija, kaip mes visi žinome, yra skaičių serija, kurioje kiekvienas skaičius yra ankstesnių dviejų skaičių suma. Pirmieji du skaičiai yra 0 ir 1. Čia pateikiama generatoriaus programa, skirta generuoti „Fibonacci“ serijas:

PAVYZDYS:

def fibo (): pirmas, antras = 0,1, o tiesa: pirmas, antras = antras, pirmas + antras x x fibo (): jei x> 50: pertrauka spausdinti (x, pabaiga = '')

IŠĖJIMAS:

0 1 1 2 3 5 8 13 21 34

Aukščiau pateiktame išvestyje rodomos „Fibonacci“ serijos, kurių vertės yra mažesnės nei 50. Dabar pažvelkime, kaip sukurti skaičių sąrašą.

Skaičių generavimas:

Jei norite sugeneruoti nurodytus sąrašo numerius, galite tai padaryti naudodami generatoriaus funkcijas. Pažvelkite į šį pavyzdį:

PAVYZDYS:

a = diapazonas (10) b = (x x x a) print (b) y y b: print (y)

IŠĖJIMAS:

0
vienas
2
3
4
5
6
7
8
9

PAVYZDYS:

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

IŠĖJIMAS:


2
4
6
8

Pirmiau nurodyta programa grąžino lyginius skaičius nuo 2 iki 10. Tai padės mums baigti šį straipsnį apie „Python“ generatorius. Tikiuosi, kad supratote visas temas.

Įsitikinkite, kad praktikuojate kuo daugiau ir grąžinkite savo patirtį.

Turite mums klausimą? Prašau tai paminėti šio tinklaraščio „Generatoriai„ Python ““ komentarų skyriuje ir mes kuo greičiau susisieksime su jumis.

Norėdami gauti išsamių žinių apie „Python“ kartu su įvairiomis jo programomis, galite užsiregistruoti tiesiogiai su parą visą parą ir visą gyvenimą.