Comprensión del generador Python

Zeeshan Afridi 21 junio 2023
  1. Generadores en Python
  2. Comprensión del generador Python
Comprensión del generador Python

La comprensión del generador es una forma inteligente y eficiente de crear generadores en python. Es una especificación de una sola línea para definir un generador que es esencial para comprender esa sintaxis para codificar de manera eficiente.

En este artículo, aprenderemos los generadores de Python y la comprensión de los generadores junto con ejemplos.

Generadores en Python

Los generadores en Python son funciones que devuelven un objeto iterable o transversal que se utiliza para crear iteradores que recorren los elementos a la vez. El generador es una forma sencilla y fácil de crear iteradores con las funciones predefinidas iter() y next() para realizar un seguimiento de los estados internos, y también se encarga de la excepción StopInteration.

Mientras que hay mucha complejidad en la creación de iteraciones en Python, debe definir e implementar las funciones iter() y next(). Es un proceso largo para hacerlo, pero gracias a los generadores.

Veamos un ejemplo de generadores en Python.

# A simple generator function
def my_gen():
    n = 1
    print(f"This is line number {n}")
    # generator function always contains the 'yield' Keyword
    yield n

    n += 1
    print(f"This is line number {n}")
    yield n

    n += 1
    print(f"This is line number {n}")
    yield n


print(my_gen())

Producción :

<generator object my_gen at 0x00000150EA43E448>

Usamos el rendimiento en la función anterior para convertir los valores en un generador. Cuando imprimimos la función my_gen(), obtuvimos el objeto de la función que se puede usar para iterar sobre el generador.

Veamos un ejemplo para iterar sobre el generador.

def even_nums():

    # create generator
    for i in range(11):
        if i % 2 == 0:
            yield i


print("This is the generator object of the generator function:", even_nums())

# iterate over the generator function
print("\nEven number from 0 to 11")
for i in even_nums():
    print(i, end=", ")

Producción :

This is the generator object of the generator function: <generator object even_nums at 0x05ACC2D0>

Even number from 0 to 11
0, 2, 4, 6, 8, 10,

Comprensión del generador Python

La comprensión del generador es similar a la comprensión de listas en Python; sin embargo, los paréntesis y los corchetes los diferencian. Podemos crear fácilmente un generador simple utilizando la comprensión del generador en Python que funciona de manera similar a las funciones lambda, que crean funciones anónimas.

La diferencia entre la comprensión del generador y la comprensión de la lista es que la comprensión del generador crea un elemento simultáneamente, mientras que la comprensión de la lista crea la lista completa simultáneamente. La comprensión del generador es mucho más rápida y eficiente en memoria.

Veamos un ejemplo de comprensión del generador en Python.

# generator comprehension in python
# take the square of each number from 1-6 and store it in 'gen'
gen = (x ** 2 for x in range(1, 6))

print(gen)  # return --> generator object

# iterate over the generator 'gen'
for i in gen:
    print(i, end=", ")

Producción :

<generator object <genexpr> at 0x00000150EA43EC48>
1, 4, 9, 16, 25,

En el ejemplo de código anterior, la expresión del generador produjo los resultados requeridos a pedido pero no de inmediato. Devolvió el objeto del generador que luego usamos para iterar sobre el generador usando un bucle for.

Puede utilizar la función next() para imprimir secuencialmente cada valor del generador, ya que el generador se encarga de la secuencia y el estado de los valores.

# generator comprehension in python
# take the square of each number from 1-6 and store it in 'gen'
gen = (x ** 2 for x in range(1, 6))

# next()
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))

Producción :

1
4
9
16
25

Como puede ver, estamos obteniendo el valor bajo demanda usando next(), y se ocupa de la secuencia de valores a medida que obtengo el siguiente valor después de cada función next().

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

Artículo relacionado - Python Generator