Python - yield
################################################################
#10 ejemplos utilizando las palabras claves yield en Python.
#1. Generador simple que devuelve números del 1 al 5:
def numeros():
yield 1
yield 2
yield 3
yield 4
yield 5
for num in numeros():
print(num)
#2. Generador que devuelve números pares del 0 al 10:
def pares():
for num in range(11):
if num % 2 == 0:
yield num
for num in pares():
print(num)
#3. Generador que devuelve los caracteres de una cadena de texto:
def caracteres(texto):
for char in texto:
yield char
for letra in caracteres('Hola'):
print(letra)
#4. Generador que devuelve los números de una lista que son mayores que un valor dado:
def mayores_que(lista, valor):
for num in lista:
if num > valor:
yield num
numeros = [1, 5, 10, 15, 20]
for num in mayores_que(numeros, 10):
print(num)
#5. Generador que devuelve los números de una lista que son pares:
def pares(lista):
for num in lista:
if num % 2 == 0:
yield num
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in pares(numeros):
print(num)
#6. Generador que devuelve los números de una lista que son impares:
def impares(lista):
for num in lista:
if num % 2 != 0:
yield num
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in impares(numeros):
print(num)
#7. Generador que devuelve los números de una lista que son divisibles por un valor dado:
def divisibles(lista, divisor):
for num in lista:
if num % divisor == 0:
yield num
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in divisibles(numeros, 3):
print(num)
#8. Generador que devuelve los números de una lista que son primos:
def es_primo(num):
if num < 2:
return False
for i in range(2, num):
if num % i == 0:
return False
return True
def primos(lista):
for num in lista:
if es_primo(num):
yield num
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in primos(numeros):
print(num)
#9. Generador que devuelve los números de una lista que son cuadrados perfectos:
def es_cuadrado_perfecto(num):
raiz = int(num ** 0.5)
return raiz ** 2 == num
def cuadrados_perfectos(lista):
for num in lista:
if es_cuadrado_perfecto(num):
yield num
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in cuadrados_perfectos(numeros):
print(num)
#10. Generador que devuelve los números de una lista que son múltiplos de dos valores dados:
def multiplos(lista, divisor1, divisor2):
for num in lista:
if num % divisor1 == 0 and num % divisor2 == 0:
yield num
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in multiplos(numeros, 2, 3):
print(num)