Mis on Pythoni generaatorid ja kuidas neid kasutada?



Siit saate teada, mis on Pythoni generaatorid, koos nende eelistega. Samuti saate teada, kuidas neid koos erinevate kasutusjuhtumitega luua ja kasutada.

Korduvate ülesannete või objektide genereerimist, mis võimaldavad neist üle astuda, peetakse koormavaks ülesandeks. Aga sisse , muutub selle valuliku ülesande täitmine lihtsalt tõrgeteta. Nii et lähme edasi ja uurime Pythoni generaatorit lähemalt.

Siin on loetelu kõigist selles artiklis käsitletud teemadest:





Alustame siis. :)

Mis on Pythoni generaatorid?

Generaatorid on põhimõtteliselt funktsioonid, mis tagastavad läbitavaid objekte või esemeid. Need funktsioonid ei tooda kõiki üksusi korraga, pigem toodavad need ükshaaval ja ainult vajadusel. Alati kui on kaasatud üksuste hulga kordamiseks, käivitatakse generaatori funktsioon. Generaatoritel on ka mitmeid eeliseid.



Generaatorite kasutamise eelised

  • Ilma Pythoni generaatoriteta on iterable'ide tootmine äärmiselt keeruline ja pikk.

  • Generaatorid on hõlpsasti rakendatavad, kuna nad rakendavad automaatselt __iter __ (), __next __ () ja StopIteration, mis muidu tuleb selgesõnaliselt täpsustada.



  • Mälu salvestatakse, kui üksused on toodetud vastavalt vajadusele, erinevalt tavalisest . See asjaolu muutub väga oluliseks, kui peate looma tohutu arvu kordajaid. Seda peetakse ka generaatorite suurimaks eeliseks.

  • Saab kasutada lõpmatu hulga esemete tootmiseks.

  • Neid saab kasutada ka paljude toimingute läbiviimiseks

Tavalised funktsioonid vs generaatori funktsioonid:

Generaatorid on Pythonis loodud täpselt nagu teie loomisel kasutades märksõna def. Kuid generaatori funktsioonid kasutavad tootluse märksõna tagasipöördumise asemel. Seda tehakse selleks, et teavitada tõlki, et tegemist on iteraatoriga. Vähe sellest, generaatori funktsioone käivitatakse järgmise () funktsiooni kutsumisel, mitte nende nimega nagu tavaliste funktsioonide korral. Selle paremaks mõistmiseks kaaluge järgmist näidet:

NÄIDE:

def func (a): a = [1,2,3] b = func (a) järgmine (b)

VÄLJUND: [1, 2, 3]

Nagu näete, kasutab func () ülaltoodud väljundis tootluse märksõna ja selle täitmiseks järgmist funktsiooni. Kuid tavapärase funktsiooni jaoks vajate järgmist kooditükki:

NÄIDE:

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

VÄLJUND: [1, 2, 3]

Kui vaatate ülaltoodud näidet, võite mõelda, miks kasutada funktsiooni Generaator, kui ka tavaline funktsioon tagastab sama väljundi. Nii et lähme edasi ja vaatame, kuidas Pythonis Generaatorit kasutada.

Generaatori funktsioonide kasutamine:

Nagu varem mainitud, toodavad Pythoni generaatorid korduvaid üksusi. Vaadake järgmist näidet:

NÄIDE:

def myfunc (a): kui a> = 3: anna a = a + 1 b = myfunc (a) print (b) järgmine (b)

Järgmise funktsiooni käivitamisel näete järgmist väljundit:

meetodi ülekoormamine ja meetodi ülimuslikkus Java-s

VÄLJUND: 4

Siin on tagastatud üks korduv objekt, mis vastab tingimusele while. Pärast täitmist kantakse juht helistajale üle. Kui on vaja rohkem üksusi, tuleb sama funktsioon uuesti käivitada, kutsudes järgmise funktsiooni ().

järgmine (b)

VÄLJUND: 5

Edasiste hukkamiste korral tagastab funktsioon 6,7 jne. Pythoni generaatorifunktsioonid rakendavad meetodid __iter __ () ja __next __ () automaatselt. Seetõttu saate objektide kohta itereerida, kasutades lihtsalt meetodit next (). Kui üksuse genereerimine peaks lõppema, rakendavad generaatori funktsioonid StopIteration sisemiselt, ilma et peaksite helistajat muretsema. Siin on veel üks näide sellest:

NÄIDE:

müügijõu arendaja õpetus algajatele
a = 2 def myfunc (a): kui a> = 0: saadakse a - = 1 b = myfunc (a) print (b) järgmine (b)

VÄLJUND:

StopIteration-Generators Python-EdurekasÜlaltoodud pilt näitab meie programmi käivitamist vajaliku arvu kordi. Kui proovite järgmisele funktsioonile uuesti helistada, tagastab see kujutise StopIteration on rakendatud. Kui proovite seda teha tavaliste funktsioonidega, siis tagastatud väärtused ei muutu ega kordu. Vaadake järgmist näidet:

NÄIDE:

def z (): n = 1 saagis n n = n + 3 saagis n p = z () järgmine (p)

VÄLJUND:

Silmustega generaatorid:

Kui soovite sama funktsiooni korraga käivitada, võite kasutada tsüklit ‘for’. See silmus aitab objektidel korduda ja pärast kõiki rakendusi käivitab StopIterationi.

NÄIDE:

def z (): n = 1 saagis n n = n + 3 saagis n x-le z-s (): print (x)

VÄLJUND:

üks
4

Korduvate objektide loomiseks võite ka väljendeid määrata.

Generaatori väljendid:

Kordajate loomiseks võite kasutada väljendeid koos silmusega for. See muudab põlvkonna iterable tavaliselt palju lihtsamaks. Generaatori avaldis sarnaneb loendi mõistmisega ja sarnasega lambda funktsioonid , loovad generaatori avaldised anonüümsed generaatori funktsioonid.

Vaadake järgmist näidet:

NÄIDE:

a = vahemik (6) print ('Loendi mõistmine', lõpp = ':') b = [x + 2 x-i jaoks a] print (b) print ('Generaatori avaldis', end = ': n') c = (x + 2 x-i jaoks a) print (c) y-i jaoks c-s: print (y)

VÄLJUND:

Loendi mõistmine: [2, 3, 4, 5, 6, 7]

Generaatori avaldis:

2
3
4
5
6

Nagu näete, on ülaltoodud väljundis esimene avaldus loendi mõistmine, mis on täpsustatud sulgudes []. Loendi mõistmine loob täieliku üksuste loendi korraga. Järgmine on generaatori avaldis, mis tagastab samad üksused, kuid ükshaaval. See määratakse sulgudes ().


Generaatorfunktsioone saab kasutada ka teiste funktsioonide sees.Näiteks:

NÄIDE:

a = vahemik (6) print ('Generaatori avaldis', lõpp = ': n') c = (x + 2 x-le a-s) print (c) print (min (c))

VÄLJUND:

Generaatori avaldis
2

Ülaltoodud programm prindib minimaalse väärtuse, kui ülaltoodud avaldis rakendub a väärtustele.

Kasutusjuhud:

Kasutagem generaatorit sisse kuni:

  • Looge Fibonacci seeria
  • Numbrite genereerimine

Fibonacci seeria genereerimine:

Fibonacci seeria, nagu me kõik teame, on arvude rida, kus iga number on kahe eelneva arvu summa. Esimesed kaks numbrit on 0 ja 1. Siin on generaatorprogramm Fibonacci seeria genereerimiseks:

NÄIDE:

kuidas sorteerida massiivi c ++ keeles
def fibo (): esimene, teine ​​= 0,1, samas kui tõene: saage xo jaoks esimene esimene, teine ​​= teine, esimene + sekund fibo () korral: kui x> 50: murda print (x, lõpp = '

VÄLJUND:

0 1 1 2 3 5 8 13 21 34

Ülaltoodud väljund näitab Fibonacci seeriat väärtusega alla 50. Vaatame nüüd, kuidas luua arvude loend.

Numbrite genereerimine:

Kui soovite genereerida kindlaksmääratud loendinumbrid, saate seda teha generaatori funktsioonide abil. Heitke pilk järgmisele näitele:

NÄIDE:

a = vahemik (10) b = (x x-le a-s) print (b) y-le b-s: print (y)

VÄLJUND:

0
üks
2
3
4
5
6
7
8
9

NÄIDE:

a = vahemik (2,10,2) b = (x x-le a-s) print (b) y-le b-s: print (y)

VÄLJUND:


2
4
6
8

Ülaltoodud programm on tagastanud paarisarvud 2 kuni 10. See viib meid Pythoni generaatorite artikli lõppu. Loodan, et olete kõigist teemadest aru saanud.

Harjutage kindlasti nii palju kui võimalik ja pöörake oma kogemused tagasi.

Kas teil on meile küsimus? Palun mainige seda selle blogi „Generaatorid Pythonis“ kommentaaride jaotises ja võtame teiega ühendust niipea kui võimalik.

Põhjalike teadmiste saamiseks Pythoni ja selle erinevate rakenduste kohta saate registreeruda otseülekandeks 24/7 toe ja ligipääsuga kogu eluks.