Función de envío en generadores de Python

Preet Sanghavi 21 junio 2023
  1. Descripción general de los generadores
  2. Utilice send() en los generadores de Python
Función de envío en generadores de Python

Este tutorial enseñará cómo usar la función send() del generador en Python.

Descripción general de los generadores

Puede crear una función que actúe como un iterador y se pueda usar en un bucle for a través de las funciones del generador de Python. Por ejemplo, compararemos varias implementaciones de un método llamado first_n() que representa los primeros n enteros no negativos.

Dado que n es un número enorme, supondremos que cada número entero requiere mucho espacio de almacenamiento (digamos, 10 megabytes cada uno) para hacer esta comparación.

Recuerda que no ocupan mucho espacio en la vida real a menos que sean números enteros enormes. Entonces, por ejemplo, puede usar 128 bytes para representar un número entero de 309 dígitos.

Consideremos el siguiente ejemplo.

def first_n(n):
    num, nums = 0, []
    while num < n:
        nums.append(num)
        num += 1
    return nums


sum_of_first_n = sum(first_n(1000000))

El código anterior hace una función de suma que suma valores hasta los primeros n números. El único problema es que acumula mucha memoria.

Recuerde, no podemos darnos el lujo de mantener enteros de hasta 10 megabytes en nuestra memoria. Entonces, para resolverlo, hacemos uso de generadores en Python.

Un generador ayuda a crear iteradores. Podemos entenderlo a través del siguiente bloque de código.

def first_n(n):
    num, nums = 0, []
    while num < n:
        yield num
        num += 1
    return nums


print(sum(first_n(1000000)))

Producción :

499999500000

La valla de código anterior utiliza la función de caso de uso de memoria de la ejecución del iterador.

Utilice send() en los generadores de Python

El método send() para generadores-iteradores es útil para generadores. Desde la versión 2.5 de Python, esta función, especificada en PEP 342, es accesible.

El generador se reinicia con el método send(), que también envía un valor que se utilizará para iniciar el rendimiento posterior. Finalmente, el proceso (método) devuelve el nuevo valor arrojado por el generador.

El método send() es similar a usar next() cuando no hay ningún valor. Ninguno es otro valor posible para este procedimiento. En ambas circunstancias, el generador reenviará su operación a la primera declaración de retorno.

Exploremos la función send() en el siguiente código.

def numberGenerator(n):
    number = yield
    while number < n:
        yield number
        number += 1


g = numberGenerator(10)
next(g)
print(g.send(5))

Producción :

5

Como podemos ver en el bloque de código anterior, en la última línea, enviamos el valor 5 dentro de nuestra variable g, asegurándonos de que el generador considere la última entrada como 5.

La función send() envía el último valor aceptable a la variable generadora que puede utilizar como última entrada. Así, hemos entendido cómo funcionan los generadores y el significado de la función send() de un generador.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Artículo relacionado - Python Function

Artículo relacionado - Python Generator