¿Qué son los generadores en Python y cómo usarlos?



Aprenda qué son los generadores en Python junto con las ventajas. También aprenda a crearlos y usarlos junto con varios casos de uso.

Generar iterables u objetos que permitan pasar sobre ellos se considera una tarea onerosa. Pero en , la implementación de esta dolorosa tarea es realmente sencilla. Así que sigamos adelante y echemos un vistazo más de cerca a los generadores en Python.

Aquí hay una lista de todos los temas cubiertos en este artículo:





Vamos a empezar. :)

¿Qué son los generadores en Python?

Los generadores son básicamente funciones que devuelven objetos o elementos transitables. Estas funciones no producen todos los elementos a la vez, sino que los producen uno a la vez y solo cuando es necesario. Siempre que el se incluye para iterar sobre un conjunto de elementos, se ejecuta una función de generador. Los generadores también tienen una serie de ventajas.



Ventajas de usar generadores

  • Sin Generadores en Python, producir iterables es extremadamente difícil y largo.

  • Generadores fáciles de implementar ya que implementan automáticamente __iter __ (), __next __ () y StopIteration que, de lo contrario, deben especificarse explícitamente.



  • La memoria se guarda a medida que los elementos se producen cuando es necesario, a diferencia de lo normal . Este hecho se vuelve muy importante cuando necesita crear una gran cantidad de iteradores. Esto también se considera la mayor ventaja de los generadores.

  • Puede usarse para producir una cantidad infinita de artículos.

  • También se pueden utilizar para canalizar una serie de operaciones

Funciones normales frente a funciones del generador:

Los generadores en Python se crean tal como usted crea utilizando la palabra clave 'def'. Sin embargo, las funciones de Generator utilizan la palabra clave yield en lugar de return. Esto se hace para notificar al intérprete que se trata de un iterador. No solo esto, las funciones del generador se ejecutan cuando se llama a la función next () y no por su nombre como en el caso de las funciones normales. Considere el siguiente ejemplo para comprenderlo mejor:

EJEMPLO:

cadena java dividir múltiples delimitadores
def func (a): rendimiento a a = [1,2,3] b = func (a) siguiente (b)

SALIDA: [1, 2, 3]

Como puede ver, en la salida anterior, func () está haciendo uso de la palabra clave yield y la siguiente función para su ejecución. Pero, para un funcionamiento normal, necesitará el siguiente código:

EJEMPLO:

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

SALIDA: [1, 2, 3]

Si observa el ejemplo anterior, es posible que se pregunte por qué utilizar una función Generator cuando la función normal también devuelve la misma salida. Así que sigamos adelante y veamos cómo usar generadores en Python.

Usando las funciones del generador:

Como se mencionó anteriormente, los generadores en Python producen iterables uno a la vez. Eche un vistazo al siguiente ejemplo:

EJEMPLO:

def myfunc (a): while a> = 3: rendimiento a a = a + 1 b = myfunc (a) print (b) next (b)

Cuando ejecute la siguiente función, verá el siguiente resultado:

SALIDA: 4

Aquí, se ha devuelto un objeto iterable que cumple la condición while. Después de la ejecución, el control se transfiere al llamante. En caso de que se necesiten más elementos, la misma función debe ejecutarse nuevamente llamando a la función next ().

siguiente (b)

SALIDA: 5

En más ejecuciones, la función devolverá 6,7, etc. Las funciones generadoras en Python implementan los métodos __iter __ () y __next __ () automáticamente. Por lo tanto, puede iterar sobre los objetos simplemente usando el método next (). Cuando la generación de elementos debe terminar, las funciones del generador implementan la StopIteration internamente sin tener que preocupar a la persona que llama. Aquí hay otro ejemplo de esto:

EJEMPLO:

a = 2 def myfunc (a): while a> = 0: rendimiento a a - = 1 b = myfunc (a) print (b) next (b)

SALIDA:

StopIteration-Generators en Python-EdurekaLa imagen de arriba muestra la ejecución de nuestro programa requerido el número de veces. Si intenta llamar a la siguiente función nuevamente, devuelve un mensaje que muestra StopIteration ha sido implementado. Si intenta hacer esto con funciones normales, los valores devueltos no cambiarán ni se repetirán. Eche un vistazo al siguiente ejemplo:

EJEMPLO:

def z (): n = 1 rendimiento n n = n + 3 rendimiento n p = z () siguiente (p)

SALIDA:

Generadores con lazos:

En caso de que desee ejecutar la misma función a la vez, puede utilizar el ciclo 'for'. Este bucle ayuda a iterar sobre los objetos y, después de todas las implementaciones, ejecuta StopIteration.

EJEMPLO:

def z (): n = 1 rendimiento n n = n + 3 rendimiento n para x en z (): print (x)

SALIDA:

1
4

También puede especificar expresiones para generar objetos iterables.

Expresiones generadoras:

También puede usar expresiones junto con el bucle for para producir iteradores. Esto suele facilitar mucho la generación de iterables. La expresión del generador se asemeja a las listas por comprensión y similares funciones lambda , las expresiones generadoras crean funciones generadoras anónimas.

Eche un vistazo al siguiente ejemplo:

EJEMPLO:

a = rango (6) print ('Comprensión de lista', end = ':') b = [x + 2 para x en a] print (b) print ('Expresión generadora', end = ': n') c = (x + 2 para x en a) imprimir (c) para y en c: imprimir (y)

SALIDA:

Comprensión de listas: [2, 3, 4, 5, 6, 7]

Expresión del generador:

cómo usar logger en java

2
3
4
5
6

Como puede ver, en el resultado anterior, la primera expresión es una lista de comprensión que se especifica entre corchetes []. La comprensión de listas produce la lista completa de elementos a la vez. La siguiente es una expresión generadora que devuelve los mismos elementos, pero uno a la vez. Se especifica mediante corchetes ().


GeneradorLas funciones también se pueden utilizar dentro de otras funciones.Por ejemplo:

EJEMPLO:

a = rango (6) print ('Expresión generadora', end = ': n') c = (x + 2 para x en a) print (c) print (min (c))

SALIDA:

Expresión generadora
2

El programa anterior imprime el valor mínimo cuando la expresión anterior se aplica a los valores de a.

Casos de uso:

Usemos generadores en a:

  • Generar Serie Fibonacci
  • Generando números

Generando Serie Fibonacci:

La serie de Fibonacci, como todos sabemos, es una serie de números en la que cada número es una suma de dos números anteriores. Los dos primeros números son 0 y 1. Aquí hay un programa generador para generar series de Fibonacci:

EJEMPLO:

def fibo (): primero, segundo = 0,1 while True: ceder primero primero, segundo = segundo, primero + segundo para x en fibo (): si x> 50: romper print (x, end = '')

SALIDA:

0 1 1 2 3 5 8 13 21 34

El resultado anterior muestra la serie de Fibonacci con valores inferiores a 50. Veamos ahora cómo generar una lista de números.

Generando números:

En caso de que desee generar números de lista específicos, puede hacerlo utilizando las funciones del generador. Eche un vistazo al siguiente ejemplo:

EJEMPLO:

a = rango (10) b = (x para x en a) imprimir (b) para y en b: imprimir (y)

SALIDA:

0
1
2
3
4
5
6
7
8
9

EJEMPLO:

a = rango (2,10,2) b = (x para x en a) imprimir (b) para y en b: imprimir (y)

SALIDA:


2
4
6
8

El programa anterior ha devuelto números pares del 2 al 10. Esto nos lleva al final de este artículo sobre Generadores en Python. Espero que hayas entendido todos los temas.

Asegúrese de practicar tanto como sea posible y revertir su experiencia.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de este blog 'Generadores en Python' y nos comunicaremos con usted lo antes posible.

Para obtener un conocimiento profundo de Python junto con sus diversas aplicaciones, puede inscribirse en Live con soporte 24/7 y acceso de por vida.