2853 visitas
En este artículo técnico vamos a ver como funcionan los generadores en python.Tienen una sintaxis muy similar a la comprensión de listas. Esta es exactamente igual, a excepción de que se utilizan paréntesis en lugar de corchetes: l2 = (i ** 2 for i in range(10)). Un generador nos proporciona un conjunto de valores que los podemos obtener utilizando un bucle for. Si intentamos imprimir un generador no veremos los valores si no la referencia en memoria de ese objeto. Algo parecido a esto:
Un generador es una clase especial de función que genera valores sobre los que iterar. Para devolver el siguiente valor sobre el que iterar se utiliza la palabra reservada yield en lugar de return. Si queremos generar en nuestro caso números primos, el generador se representará mediante una función en vez de la forma compacta que hemos visto antes. A la función se le pueden pasar 2 o 3 parámetros (inicio, fin y salto) El uso será muy similar a range
for i in range(0, 10, 2):
print(i)
En nuestro caso si quisiéramos imprimir los números primos entre 0 y 100 utilizaríamos el generador de la siguiente forma:
for i in generador_primos(0,100):
print(i)
Dentro de la función que representa el generador implementaremos la función que comprueba si un número es primo o no. Dentro del generador todos los valores que sean un número primo les aplicamos la instrucción yield con esto indicamos que se será un valor devuelto por el generador. Adjuntamos el ejemplo completo y al final indicamos un curso relacionado con este contenido y el enlace de descarga. Para este ejemplo utilizamos python 3.6.
def generador_primos(ini,fin):
""" Utiliza una funcion interna para comprobar si n es primo"""
def esPrimo(n):
if n <= 0:
return False
for i in range(2,n):
if n % i == 0:
return False
return True
n = ini
while(n <= fin):
if esPrimo(n):
yield n
n += 1
# Utilizar el generador para iterar por los número primos:
for n in generador_primos(0, 50):
print (n,end=" ")
print()