Generar iterables o objectes que permetin trepitjar-los es considera una tasca pesada. Però, dins , la implementació d'aquesta tasca tan dolorosa és molt senzilla. Així que anem endavant i examinem més de prop Generators in Python.
operador d'abast c ++
Aquí teniu una llista de tots els temes tractats en aquest article:
- Què són els generadors?
- Avantatges d'utilitzar generadors
- Funcions normals vs funcions de generador
- Ús de funcions de generador
- Generadors amb bucles
- Expressions del generador
- Casos d’ús
Comencem, doncs. :)
Què són els generadors de Python?
Els generadors són bàsicament funcions que retornen objectes o elements recorreguts. Aquestes funcions no produeixen tots els elements alhora, sinó que els produeixen d’un en un i només quan es requereix. Sempre que el s'inclou per repetir un conjunt d'elements, s'executa una funció generadora. Els generadors també tenen una sèrie d’avantatges.
Avantatges d'utilitzar generadors
Sense generadors a Python, produir iterables és extremadament difícil i llarg.
Els generadors són fàcils d’implementar, ja que implementen automàticament __iter __ (), __next __ () i StopIteration que, en cas contrari, cal especificar explícitament.
La memòria es desa a mesura que es produeixen els elements quan es requereix, a diferència del normal . Aquest fet esdevé molt important quan cal crear un gran nombre d'iteradors. Això també es considera l’avantatge més gran dels generadors.
Es pot utilitzar per produir un nombre infinit d’elements.
També es poden utilitzar per canalitzar diverses operacions
Funcions normals vs funcions de generador:
Els generadors de Python es creen de la mateixa manera que es crea mitjançant la paraula clau 'def'. Però, les funcions del generador fan ús de la paraula clau rendiment en lloc de retorn. Això es fa per notificar a l'intèrpret que es tracta d'un iterador. No només això, les funcions del generador s’executen quan es crida la funció next () i no pel seu nom, com en el cas de funcions normals. Penseu en el següent exemple per entendre-ho millor:
EXEMPLE:
def func (a): produeix a a = [1,2,3] b = func (a) next (b)
SORTIDA: [1, 2, 3]
Com podeu veure, a la sortida anterior, func () fa ús de la paraula clau rendiment i de la següent funció per a la seva execució. Però, per a una funció normal, necessitareu el codi següent:
EXEMPLE:
def func (a): retorna a a = [1,2,3] func (a)
SORTIDA: [1, 2, 3]
Si mireu l’exemple anterior, us podeu preguntar per què utilitzar una funció Generador quan la funció normal també torna la mateixa sortida. Per tant, continuem i vegem com s'utilitzen els generadors a Python.
Ús de funcions de generador:
Com s’ha esmentat anteriorment, els generadors de Python produeixen iterables d’un en un. Mireu l'exemple següent:
EXEMPLE:
def myfunc (a): mentre que a> = 3: obtingueu a a = a + 1 b = myfunc (a) imprimeix (b) següent (b)
Quan executeu la funció següent, veureu la sortida següent:
SORTIDA: 4
Aquí, s'ha retornat un objecte iterable que compleix la condició while. Després de l'execució, el control es transfereix a la persona que truca. En cas que es necessitin més elements, cal tornar a executar la mateixa funció trucant a la funció next ().
següent (b)
SORTIDA: 5
En altres execucions, la funció retornarà 6,7, etc. Les funcions del generador de Python implementen automàticament els mètodes __iter __ () i __next __ (). Per tant, podeu recórrer els objectes només amb el mètode next (). Quan s'ha de finalitzar la generació d'elements, les funcions del generador implementen el fitxer StopIteration internament sense haver de preocupar la persona que truca. Aquí hi ha un altre exemple d'això:
EXEMPLE:
a = 2 def myfunc (a): mentre que a> = 0: produeix a a - = 1 b = myfunc (a) imprimeix (b) següent (b)
SORTIDA:
La imatge anterior mostra l'execució del programa requerit diverses vegades. Si intenteu tornar a trucar a la següent funció, us mostrarà un missatge StopIteration s'ha implementat. Si proveu de fer-ho amb funcions normals, els valors retornats no canviaran ni iteraran. Mireu l'exemple següent:
EXEMPLE:
def z (): n = 1 rendiment n n = n + 3 rendiment n p = z () següent (p)
SORTIDA:
Generadors amb bucles:
En cas que vulgueu executar la mateixa funció alhora, podeu fer servir el bucle 'per'. Aquest bucle ajuda a recórrer els objectes i després de totes les implementacions executa StopIteration.
EXEMPLE:
def z (): n = 1 rendiment n n = n + 3 rendiment n per x a z (): imprimir (x)
SORTIDA:
1
4
També podeu especificar expressions per generar objectes iterables.
Expressions del generador:
També podeu utilitzar expressions junt amb el bucle for per produir iteradors. Això sol fer que la generació iterables sigui molt més fàcil. L’expressió del generador s’assembla a comprensions de llista i similars funcions lambda , expressions del generador creen funcions de generador anònimes.
Mireu l'exemple següent:
EXEMPLE:
a = range (6) print ('Comprensió de llista', end = ':') b = [x + 2 per a x en a] print (b) print ('Expressió del generador', end = ': n') c = (x + 2 per x en a) imprimir (c) per y en c: imprimir (y)
SORTIDA:
Comprensió de la llista: [2, 3, 4, 5, 6, 7]
Expressió del generador:
2
3
4
5
6
Com podeu veure, a la sortida anterior, la primera expressió és una comprensió de llista que s’especifica entre claudàtors []. La comprensió de la llista produeix la llista completa d’ítems alhora. La següent és una expressió generadora que retorna els mateixos elements però un a la vegada. S’especifica mitjançant claudàtors ().
GeneradorLes funcions també es poden utilitzar dins d'altres funcions.Per exemple:
EXEMPLE:
a = interval (6) imprimir ('Expressió del generador', final = ': n') c = (x + 2 per a x en a) imprimir (c) imprimir (mínim (c))
SORTIDA:
Expressió del generador
2
El programa anterior imprimeix el valor mínim quan l'expressió anterior s'aplica als valors de.
Casos d'ús:
Utilitzem Generadors a a:
- Generar sèries de Fibonacci
- Generació de números
Generació de sèries de Fibonacci:
La sèrie de Fibonacci, com tots sabem, és una sèrie de nombres en què cada nombre és una suma de dos números anteriors. Els dos primers nombres són 0 i 1. Aquí hi ha un programa generador per generar sèries de Fibonacci:
EXEMPLE:
def fibo (): primer, segon = 0,1 mentre que True: es produeix primer, segon = segon, primer + segon per a x en fibo (): si x> 50: imprimir (x, end = ')
SORTIDA:
0 1 1 2 3 5 8 13 21 34
La sortida anterior mostra la sèrie de Fibonacci amb valors inferiors a 50. Vegem ara com es genera una llista de nombres.
Generació de números:
En cas que vulgueu generar números de llista especificats, podeu fer-ho mitjançant funcions de generador. Feu un cop d'ull al següent exemple:
EXEMPLE:
a = rang (10) b = (x per x en a) imprimir (b) per y en b: imprimir (y)
SORTIDA:
0
1
2
3
4
5
6
7
8
9
EXEMPLE:
a = rang (2,10,2) b = (x per x en a) imprimir (b) per y en b: imprimir (y)
SORTIDA:
2
4
6
8
El programa anterior ha retornat números parells del 2 al 10. Això ens porta al final d’aquest article sobre Generadors a Python. Espero que hagueu entès tots els temes.
Assegureu-vos de practicar el màxim possible i de recuperar la vostra experiència.Tens alguna pregunta? Si us plau, mencioneu-ho a la secció de comentaris d’aquest bloc “Generadors a Python” i us respondrem el més aviat possible.
Per obtenir coneixements en profunditat sobre Python juntament amb les seves diverses aplicacions, podeu inscriure-us a la publicació amb assistència les 24 hores del dia, els 7 dies de la setmana i accés permanent