Muy bien, esta enorme lista finalmente terminó de ser ingresada en la memoria.
Pero recuerde nuestros términos clave, ¿recuerda cómo dijo que una lista es iterable?
¿Qué fue un iterable?
Bueno, un iterable es cualquier objeto en Python, que podemos recorrer debajo del capó,
tiene el método Dundar ed.
Entonces, cuando se crea el objeto, esta opción nos permite tener un objeto iterable que
se puede iterar para iterar algo o la iteración es el acto de tomar un elemento de un iterable, hacerle algo y luego
pasar al siguiente.
Cuando usamos bucles como bucles for o bucles while, lo llamamos iteración.
Es el proceso en sí.
Y generadores.
Son realmente iterables, es decir, todo lo que es un generador es iterable, puede iterar sobre ellos, pero no todo
lo que es.
Iterable es un generador, por ejemplo, una gama es un generador.
Entonces eso siempre será iterable.
Pero una lista es iterable, pero no es un generador.
Entonces, un generador es un subconjunto de un iterable.
Sé que son muchas palabras.
Ojalá sigas conmigo.
La diferencia entre un generador y un iterable regular es la forma en que los implementamos.
Déjame mostrarte una forma general de crear un generador.
Limpiemos este código y definamos nuestro propio generador y los generadores suelen ser funciones al igual que el rango es una función,
los generadores generalmente se crean de esta manera.
Digamos que la función del generador.
Y esta función generadora tendrá un bucle for que recorrerá un rango como lo teníamos
antes.
Pero la diferencia aquí es que recuperemos el código que teníamos anteriormente.
Ella comentará esto para que podamos verlo en términos de diferencia.
La función del generador va a.
Cree, digamos, estos muchos elementos.
Pero en lugar de regresar como lo haríamos en una función regular, usaremos una palabra clave llamada
rendimiento.
Y aquí vamos a ceder el ítem.
Así que note la diferencia aquí.
Ahora, si queremos como aquí, podemos pasar un número.
Así, pero en lugar de volver.
Y agregando esta lista y creando todos estos datos, usaremos ILD.
Ahora, ¿qué produce rendimiento? ¿Ves rendimiento pausa la función y vuelve a ella cuando le hacemos algo, que se llama
a continuación, algo que cubriremos en breve?
Entonces Yield dice, oye, pausa la función, solo cede.
Doy yo y cuando me digas que continúe de nuevo, seguiré adelante.
Entonces cómo podemos hacer esto?
Bueno, puedo decir para el elemento de la función del generador al que voy.
Imprime el artículo.
Ahora, aquí, lo que va a suceder es que vamos a recorrer la función del generador y se lo daremos
a la función del generador, digamos mil por ahora.
Y vamos a imprimir cada elemento en la función del generador porque es iterable.
Se ejecutará y se repetirá, y para cada elemento de este número, ese es el rango que vamos a dar
¿por qué?
Así que seguirá dando vueltas y vueltas.
Y cuando volvamos, cuando damos vueltas.
Vamos a ejecutar esto y el rendimiento.
Vuelve y corre de nuevo.
Déjame mostrarte lo que voy a comentar, comenta esto también y haz clic en Ron aquí.
¿Viste que lo que acabamos de hacer aquí es similar a aquí abajo, pero en lugar de tener que crear esa
lista en la memoria, siguió avanzando una por una?
Solo teníamos un elemento en la memoria.
Y lo usamos como queríamos, en nuestro caso, todo lo que hicimos fue imprimir el artículo.
Exploremos un poco más esta palabra clave de rendimiento.
¿Qué es lo que hace?
Digamos que queremos multiplicar esto por dos, como hicimos aquí en nuestro ejemplo original con list,
pero ahora en lugar de hacer el ciclo for, simplemente llamemos a la función.
Y digamos que G es igual a la función del generador y le daremos 100.
Ahora, si imprimo G y hago clic en ejecutar.
Ves que obtengo un objeto generador.
Recuerdo que esta es solo la forma estándar en Python en la que podemos crear una
función generadora usando la palabra clave range y yield, pero esta palabra clave yield nos da algo de poder porque si regreso aquí.
No obtendremos nada especial, de hecho, solo obtendremos un valor mediante el uso de
la palabra clave de rendimiento.
Lo que podemos hacer es convertir esto en una función de generador que puede funcionar bien, esto puedo decir Next
G.
Ahora, si imprimo Next G aquí y hago clic en ejecutar.
Me sale cero.
Pero aquí hay una parte interesante, si hago NextG dos veces y luego una vez aquí e imprimo.
Yo me quedo
¿Porqué es eso?
Recuerde, la palabra clave eagle detiene la función.
Entonces, lo que acaba de pasar aquí es que ejecuté la función con cien.
El primer elemento en el rango 100 fue cero.
Derecha.
Ahora, aquí, antes de que pudiera ejecutarlo, se dice, oye, esta es una función de generador, pero la primera vez que
la ejecuta.
Dar la salida cero veces para que la primera vez que ejecutemos esta función y haga clic en ejecutar.
Me aseguraré de cambiar eso por yo.
Este es solo este año.
Si lo ejecuto de nuevo así, entonces ahora quiero que repita y vaya a uno.
Entonces, uno por dos, ¿qué es eso?
¿Qué, una vez para dejarme arreglar eso así?
Asegúrese de que este sea yo, lo hago porque uno por dos es dos, si lo ejecuto de nuevo y hago clic en ejecutar.
Yo me quedo
Verá rendimiento, como dije antes, pausa la función y vuelve a ella cuando se llama a la siguiente.
Entonces, si tiene una palabra clave de rendimiento, se convierte en un generador.
Realiza un seguimiento de este estado, lo que llamamos el valor, y solo mantiene los datos más recientes en la
memoria, por ejemplo, porque recuerda eso porque en la última línea 14, si imprimo Siguiente G.
Recuerda que anteriormente este era yo.
Bueno, por ahora, aunque este código ya se ejecutó, si lo ejecuto en la línea 14.
Yo obtengo seis.
Porque tres por dos, bueno, es seis, recuerda, porque se multiplica por dos, así que déjame preguntarte esto.
Si digamos que solo hago un rango de uno aquí, ¿y sabes qué?
Quitemos, multipliquemos por dos.
Si hago esto y ejecuto más, entonces bueno, más de una vez, ¿qué va a pasar si hago clic en ejecutar aquí?
Obtengo una iteración de parada, como ves, se puede llamar a continuación tantas veces como queramos, tantas veces hasta
que expire este rango y cuando superemos la cantidad de elementos en el rango.
Bueno, tenemos una iteración de parada, er.
Para hacernos saber eso, oye, ya no puedes llamar a continuación.
Hemos llegado al final de la línea y cuando usamos bucles for con rangos, en realidad detecta esto debajo del capó
por usted.
Entonces podemos ejecutar una función como esta donde usamos range, aunque range es un generador, porque el bucle for dice
automáticamente, oye, voy a dejar de bucle tan pronto como encuentre esta iteración de parada, pero eso
es escondido de nosotros como usuarios.
Ahora bien, este concepto de generadores es bastante difícil de entender, especialmente al principio.
Por lo tanto, es posible que tenga que mirar esto un par de veces.
Pero en los próximos videos, quiero convencerlos de lo poderosos que son.
Lo veré en el próximo por.