Ce sunt generatoarele în Python și cum să le folosim?



Aflați ce sunt generatoarele din Python împreună cu avantajele. Aflați, de asemenea, cum să le creați și să le utilizați împreună cu diverse cazuri de utilizare.

Generarea de iterabile sau obiecte care permit trecerea peste ele este considerată o sarcină împovărătoare. Dar în , implementarea acestei sarcini dureroase devine foarte simplă. Așadar, să mergem mai departe și să aruncăm o privire mai atentă la Generators in Python.

de ce ar trebui să învăț sql

Iată o listă cu toate subiectele tratate în acest articol:





Deci, să începem. :)

Ce sunt generatoarele din Python?

Generatoarele sunt practic funcții care returnează obiecte sau articole traversabile. Aceste funcții nu produc toate articolele dintr-o dată, ci mai degrabă le produc pe rând și numai atunci când este necesar. Ori de câte ori este inclus pentru a itera pe un set de articole, este rulată o funcție generator. Generatoarele au și o serie de avantaje.



Avantajele utilizării generatoarelor

  • Fără Generatoare în Python, producerea de iterabile este extrem de dificilă și lungă.

  • Generatoare ușor de implementat, deoarece implementează automat __iter __ (), __ next __ () și StopIteration, care altfel trebuie specificate în mod explicit.



  • Memoria este salvată pe măsură ce articolele sunt produse atunci când este necesar, spre deosebire de normal . Acest fapt devine foarte important atunci când trebuie să creați un număr mare de iteratori. Acesta este, de asemenea, considerat drept cel mai mare avantaj al generatoarelor.

  • Poate fi folosit pentru a produce un număr infinit de articole.

  • Ele pot fi, de asemenea, utilizate pentru a conducta o serie de operațiuni

Funcții normale vs funcții generatoare:

Generatoarele din Python sunt create la fel cum creați folosind cuvântul cheie „def”. Dar, funcțiile Generator folosesc cuvântul cheie randament în loc de returnare. Acest lucru se face pentru a notifica interpretul că acesta este un iterator. Nu numai acest lucru, funcțiile Generator sunt rulate când funcția next () este apelată și nu după numele lor, ca în cazul funcțiilor normale. Luați în considerare următorul exemplu pentru a-l înțelege mai bine:

EXEMPLU:

def func (a): produce a a = [1,2,3] b = func (a) next (b)

IEȘIRE: [1, 2, 3]

După cum puteți vedea, în rezultatul de mai sus, func () folosește cuvântul cheie randament și următoarea funcție pentru executarea acestuia. Dar, pentru funcționarea normală, veți avea nevoie de următoarea bucată de cod:

EXEMPLU:

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

IEȘIRE: [1, 2, 3]

Dacă te uiți la exemplul de mai sus, s-ar putea să te întrebi de ce să folosești o funcție Generator atunci când și funcția normală returnează aceeași ieșire. Deci, să mergem mai departe și să vedem cum să folosim Generatoare în Python.

Utilizarea funcțiilor Generator:

După cum sa menționat mai devreme, generatoarele din Python produc iterabile unul câte unul. Aruncați o privire la următorul exemplu:

EXEMPLU:

def myfunc (a): în timp ce a> = 3: produce a a = a + 1 b = myfunc (a) print (b) next (b)

Când executați următoarea funcție, veți vedea următoarea ieșire:

IEȘIRE: 4

Aici, un obiect iterabil a fost returnat satisfăcând condiția while. După executare, controlul este transferat către apelant. În cazul în care sunt necesare mai multe articole, aceeași funcție trebuie executată din nou apelând funcția next ().

următorul (b)

IEȘIRE: 5

La alte execuții, funcția va returna 6,7 ​​etc. Funcțiile generatorului din Python implementează automat metodele __iter __ () și __next __ (). Prin urmare, puteți itera peste obiecte folosind doar metoda next (). Când generarea articolului trebuie să se încheie, funcțiile Generator implementează StopIteration intern fără a fi nevoie să vă îngrijorați apelantul. Iată un alt exemplu în acest sens:

EXEMPLU:

a = 2 def myfunc (a): în timp ce a> = 0: obține un a - = 1 b = myfunc (a) print (b) next (b)

IEȘIRE:

StopIteration-Generators în Python-EdurekaImaginea de mai sus arată execuția programului nostru solicitat de câte ori. Dacă încercați să apelați din nou următoarea funcție, aceasta returnează un mesaj care descrie StopIteration a fost implementat. Dacă încercați să faceți acest lucru cu funcții normale, valorile returnate nu se vor modifica sau itera. Aruncați o privire la exemplul de mai jos:

EXEMPLU:

def z (): n = 1 randament n n = n + 3 randament n p = z () următor (p)

IEȘIRE:

Generatoare cu bucle:

În cazul în care doriți să executați aceeași funcție simultan, puteți utiliza bucla „pentru”. Această buclă ajută la repetarea obiectelor și, după toate implementările, execută StopIteration.

EXEMPLU:

def z (): n = 1 randament n n = n + 3 randament n pentru x în z (): print (x)

IEȘIRE:

unu
4

De asemenea, puteți specifica expresii pentru a genera obiecte iterabile.

Expresii Generator:

De asemenea, puteți utiliza expresii împreună cu bucla for pentru a produce iteratoare. Acest lucru face de obicei generația iterabilă mult mai ușoară. Expresia generatorului seamănă cu înțelegerile listei și asemenea funcții lambda , expresiile generator creează funcții generatoare anonime.

Aruncați o privire la exemplul de mai jos:

EXEMPLU:

a = interval (6) print ('List Comprehension', end = ':') b = [x + 2 for x in a] print (b) print ('Generator expression', end = ': n') c = (x + 2 pentru x în a) print (c) pentru y în c: print (y)

IEȘIRE:

Înțelegerea listei: [2, 3, 4, 5, 6, 7]

Expresie generator:

2
3
4
5
6

După cum puteți vedea, în rezultatul de mai sus, prima expresie este o înțelegere a listei care este specificată în paranteze []. Înțelegerea listei produce lista completă a articolelor simultan. Următoarea este o expresie generator care returnează aceleași elemente, dar unul câte unul. Se specifică folosind paranteze ().


Generatorfuncțiile pot fi utilizate și în alte funcții.De exemplu:

EXEMPLU:

a = interval (6) print ('Expresie generator', sfârșit = ': n') c = (x + 2 pentru x în a) print (c) print (min (c))

IEȘIRE:

Expresie generator
2

Programul de mai sus tipărește valoarea min atunci când expresia de mai sus este aplicată valorilor unui.

Cazuri de utilizare:

Să folosim Generatoare în la:

  • Generați seria Fibonacci
  • Generarea numerelor

Generarea seriei Fibonacci:

Seria Fibonacci, după cum știm cu toții, este o serie de numere în care fiecare număr este o sumă de două numere precedente. Primele două numere sunt 0 și 1. Iată un program generator pentru a genera seria Fibonacci:

EXEMPLU:

def fibo (): primul, al doilea = 0,1 în timp ce Adevărat: cedează primul, al doilea = al doilea, primul + al doilea pentru x în fibo (): dacă x> 50: print print (x, end = '

IEȘIRE:

0 1 1 2 3 5 8 13 21 34

Rezultatul de mai sus arată seria Fibonacci cu valori mai mici de 50. Să aruncăm acum o privire la modul de generare a unei liste de numere.

Generarea numerelor:

În cazul în care doriți să generați numere de listă specificate, o puteți face folosind funcțiile generatorului. Aruncați o privire la următorul exemplu:

EXEMPLU:

a = interval (10) b = (x pentru x în a) print (b) pentru y în b: print (y)

IEȘIRE:

0
unu
2
3
4
5
6
7
8
9

EXEMPLU:

a = interval (2,10,2) b = (x pentru x în a) print (b) pentru y în b: print (y)

IEȘIRE:


2
4
6
8

Programul de mai sus a returnat numere pare de la 2 la 10. Acest lucru ne duce la sfârșitul acestui articol despre Generatoare în Python. Sper că ați înțeles toate subiectele.

Asigurați-vă că exersați cât mai mult posibil și reveniți la experiență.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui blog „Generatori în Python” și vă vom contacta cât mai curând posibil.

Pentru a obține cunoștințe aprofundate despre Python împreună cu diferitele sale aplicații, vă puteți înscrie pentru live cu suport 24/7 și acces pe viață.