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.
Artículo relacionado - Python Function
- Salir de una función en Python
- Argumentos opcionales en Python
- Ajustar una función de paso en Python
- Argumentos en la función main() en Python
- Función de identidad integrada en Python