Što su generatori u Pythonu i kako ih koristiti?



Saznajte što su generatori u Pythonu, zajedno s prednostima. Također naučite kako ih stvoriti i koristiti zajedno s raznim slučajevima upotrebe.

Stvaranje iterablea ili predmeta koji omogućuju prekoračenje smatra se teškim zadatkom. Ali u , provedba ovog bolnog zadatka postaje stvarno glatka. Pa krenimo dalje i pažljivije proučimo Generatore u Pythonu.

Evo popisa svih tema obrađenih u ovom članku:





Pa krenimo. :)

Što su generatori u Pythonu?

Generatori su u osnovi funkcije koje vraćaju prohodne objekte ili predmete. Te funkcije ne proizvode sve stavke odjednom, već ih proizvode jednu po jednu i samo kada je to potrebno. Kad god je uključen u iteraciju po skupu stavki, pokreće se funkcija generatora. Generatori također imaju brojne prednosti.



Prednosti upotrebe generatora

  • Bez generatora u Pythonu, izrada iterabilnih datoteka izuzetno je teška i dugotrajna.

  • Generatori jednostavni za primjenu jer automatski implementiraju __iter __ (), __sljedeći __ () i StopIteration koji inače trebaju biti izričito navedeni.



  • Memorija se sprema dok se predmeti proizvode prema potrebi, za razliku od uobičajenog . Ova činjenica postaje vrlo važna kada trebate stvoriti ogroman broj iteratora. To se također smatra najvećom prednošću generatora.

  • Može se koristiti za proizvodnju beskonačnog broja predmeta.

  • Oni se također mogu koristiti za izvođenje brojnih operacija

Uobičajene funkcije u odnosu na funkcije generatora:

Generatori u Pythonu stvoreni su baš kao i vi pomoću ključne riječi ‘def’. Ali, funkcije Generatora koriste ključnu riječ yield umjesto return. To se radi kako bi se tumača obavijestilo da je ovo iterator. I ne samo to, funkcije generatora pokreću se kada se pozove sljedeća () funkcija, a ne njihovim imenom kao u slučaju normalnih funkcija. Razmotrite sljedeći primjer da biste ga bolje razumjeli:

PRIMJER:

def func (a): prinos a a = [1,2,3] b = func (a) sljedeći (b)

IZLAZ: [1, 2, 3]

Kao što vidite, u gornjem izlazu func () koristi ključnu riječ yield i sljedeću funkciju za njezino izvršavanje. Ali, za normalnu funkciju trebat će vam sljedeći dio koda:

PRIMJER:

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

IZLAZ: [1, 2, 3]

Ako pogledate gornji primjer, možda se pitate zašto koristiti funkciju Generator kad normalna funkcija također vraća isti izlaz. Krenimo dalje i pogledajte kako koristiti generatore u Pythonu.

Korištenje funkcija generatora:

Kao što je ranije spomenuto, generatori u Pythonu proizvode iterable jedan po jedan. Pogledajte sljedeći primjer:

PRIMJER:

def myfunc (a): dok a> = 3: daje a a = a + 1 b = myfunc (a) ispis (b) sljedeći (b)

Kada izvršite sljedeću funkciju, vidjet ćete sljedeći izlaz:

IZLAZ: 4

Ovdje je vraćen jedan iterabilni objekt koji zadovoljava uvjet while. Nakon izvršenja, kontrola se prenosi na pozivatelja. U slučaju da je potrebno više stavki, istu funkciju treba ponovno izvršiti pozivom funkcije next ().

sljedeća (b)

IZLAZ: 5

Pri daljnjem izvršavanju, funkcija će vratiti 6,7, itd. Generatorske funkcije u Pythonu automatski implementiraju metode __iter __ () i __next __ (). Stoga možete prelaziti preko objekata koristeći samo sljedeću () metodu. Kada bi generiranje stavke trebalo završiti, funkcije generatora implementiraju StopIteracija interno, bez potrebe da brinete pozivatelja. Evo još jednog primjera za to:

PRIMJER:

a = 2 def myfunc (a): dok a> = 0: daje a a - = 1 b = myfunc (a) print (b) next (b)

IZLAZ:

StopIteration-Generatori u Python-EdurekiGornja slika prikazuje izvršenje našeg programa potreban broj puta. Ako ponovno pokušate nazvati sljedeću funkciju, ona vraća poruku koja prikazuje StopIteracija je implementiran. Ako to pokušate učiniti s normalnim funkcijama, vraćene vrijednosti neće se mijenjati ili ponavljati. Pogledajte primjer u nastavku:

PRIMJER:

def z (): n = 1 prinos n n = n + 3 prinos n p = z () sljedeći (p)

IZLAZ:

Generatori s petljama:

U slučaju da želite izvršiti istu funkciju odjednom, možete koristiti petlju 'for'. Ova petlja pomaže u iteraciji objekata i nakon svih implementacija izvršava StopIteration.

PRIMJER:

def z (): n = 1 prinos n n = n + 3 prinos n za x u z (): ispis (x)

IZLAZ:

jedan
4

Također možete odrediti izraze za generiranje iterabilnih objekata.

Izrazi generatora:

Također možete koristiti izraze zajedno s petljom for za izradu iteratora. To obično čini generacije iterabilnima mnogo jednostavnijima. Izraz generatora nalikuje razumijevanju popisa i slično lambda funkcije , izrazi generatora stvaraju anonimne funkcije generatora.

Pogledajte primjer u nastavku:

PRIMJER:

a = range (6) print ('Razumijevanje popisa', kraj = ':') b = [x + 2 za x u a] print (b) print ('Izraz generatora', end = ': n') c = (x + 2 za x u a) ispis (c) za y u c: ispis (y)

IZLAZ:

Razumijevanje popisa: [2, 3, 4, 5, 6, 7]

Izraz generatora:

2
3
4
5
6

Kao što vidite, u gornjem izlazu, prvi izraz je razumijevanje popisa koje je navedeno u zagradama []. Razumijevanje popisa odjednom daje cjelovit popis predmeta. Sljedeći je generatorski izraz koji vraća iste stavke, ali jednu po jednu. Navedeno je pomoću () zagrada.


Generatorfunkcije se mogu koristiti i unutar drugih funkcija.Na primjer:

PRIMJER:

a = range (6) print ('Izraz generatora', kraj = ': n') c = (x + 2 za x in a) print (c) print (min (c))

IZLAZ:

Izraz generatora
2

Gornji program ispisuje minimalnu vrijednost kada je gornji izraz primijenjen na vrijednosti a.

Koristite slučajeve:

Upotrijebimo generatore u do:

  • Generiraj Fibonaccijevu seriju
  • Generiranje brojeva

Generiranje Fibonaccijeve serije:

Fibonaccijeve serije kao što svi znamo niz je brojeva u kojima je svaki broj zbroj prethodnih dvaju brojeva. Prva dva broja su 0 i 1. Evo generacijskog programa za generiranje Fibonaccijeve serije:

kako spojiti podatke u tablici

PRIMJER:

def fibo (): prvi, drugi = 0,1, dok je True: prinos prvi prvi, drugi = drugi, prvi + drugi za x u fibo (): ako je x> 50: prijelom ispisa (x, kraj = '')

IZLAZ:

0 1 1 2 3 5 8 13 21 34

Gornji izlaz prikazuje Fibonaccijevu seriju s vrijednostima manjim od 50. Pogledajmo sada kako generirati popis brojeva.

Generiranje brojeva:

U slučaju da želite generirati određene brojeve popisa, to možete učiniti pomoću funkcija generatora. Pogledajte sljedeći primjer:

PRIMJER:

a = raspon (10) b = (x za x u a) ispis (b) za y u b: ispis (y)

IZLAZ:

0
jedan
2
3
4
5
6
7
8
9

PRIMJER:

a = raspon (2,10,2) b = (x za x u a) ispis (b) za y u b: ispis (y)

IZLAZ:


2
4
6
8

Gornji program vratio je parne brojeve od 2 do 10. To nas dovodi do kraja ovog članka o Generatorima u Pythonu. Nadam se da ste razumjeli sve teme.

Obavezno vježbajte što je više moguće i vratite svoje iskustvo.

Imate pitanje za nas? Molimo vas da ga spominjete u odjeljku za komentare ovog bloga 'Generatori u Pythonu' i javit ćemo vam se što je prije moguće.

Da biste stekli detaljno znanje o Pythonu, zajedno s raznim aplikacijama, možete se prijaviti za uživo s 24/7 podrškom i doživotnim pristupom.