Pipelines de generadores en Python
Encadenar generadores para que los datos fluyan por etapas perezosamente.
def numeros(limite):
for n in range(limite):
yield n
def solo_impares(fuente):
for n in fuente:
if n % 2:
yield n
def escalado(fuente, factor):
for n in fuente:
yield n * factor
pipeline = escalado(solo_impares(numeros(10)), 100)
resultado = list(pipeline)
Cómo funciona
- Cada
yieldentrega un valor corriente abajo. solo_imparesyescaladoenvuelven al generador anterior.- Nada se calcula hasta que
listtira del pipeline.
Palabras clave y builtins usados aquí
defforiflistrangeyield
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 262
- Tokens
- 71
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 43 segundos.
Paso 1 de 5 en Generadores e itertools; paso 10 de 53 en Python pythónico.