Introducción a las expresiones generadoras

Caja de herramientas Python

Hugo Bowne-Anderson

Data Scientist at DataCamp

Expresiones generadoras

  • Recuerda la comprensión de listas
[2 * num for num in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
  • Usa ( ) en lugar de [ ]
(2 * num for num in range(10))
<generator object <genexpr> at 0x1046bf888>
Caja de herramientas Python

Comprensiones de listas vs. generadores

  • Comprensión de listas: devuelve una lista
  • Generadores: devuelven un objeto generador
  • Ambos se pueden iterar
Caja de herramientas Python

Imprimir valores de generadores (1)

result = (num for num in range(6))

for num in result: print(num)
0
1
2
3
4
5
result = (num for num in range(6))

print(list(result))
[0, 1, 2, 3, 4, 5]
Caja de herramientas Python

Imprimir valores de generadores (2)

result = (num for num in range(6))
  • Evaluación perezosa
print(next(result))
0
print(next(result))
1
print(next(result))
2
print(next(result))
3
print(next(result))
4
Caja de herramientas Python

Generadores vs. listas por comprensión

Caja de herramientas Python

Generadores vs. listas por comprensión

Caja de herramientas Python

Generadores vs. listas por comprensión

Caja de herramientas Python

Condicionales en expresiones generadoras

even_nums = (num for num in range(10) if num % 2 == 0)

print(list(even_nums))
[0, 2, 4, 6, 8]
Caja de herramientas Python

Funciones generadoras

  • Producen objetos generador al llamarlas
  • Se definen como una función normal: def
  • Entregan una secuencia de valores, no uno único
  • Generan cada valor con la palabra clave yield
Caja de herramientas Python

Crea una función generadora

  • sequence.py
def num_sequence(n):
    """Generate values from 0 to n."""
    i = 0
    while i < n:
        yield i
        i += 1
Caja de herramientas Python

Usa una función generadora

result = num_sequence(5)

print(type(result))
<class 'generator'>
for item in result:
    print(item)
0
1
2
3
4
Caja de herramientas Python

¡Vamos a practicar!

Caja de herramientas Python

Preparing Video For Download...