0Pricing
Python Academy · Lección

La palabra clave yield

Escriba funciones generadoras con yield para crear iteradores personalizados.

La palabra clave yield es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.

Introducción

Las funciones generadoras usan yield para producir una secuencia de valores de forma diferida, pausando la ejecución entre cada yield.

¿Qué es yield?

Una función con yield es una función generadora. Cada llamada a next() reanuda la ejecución desde el último yield.
def count_up(n):
    for i in range(n):
        yield i
for x in count_up(3):
    print(x)

Función generadora frente a función normal

Llamar a una función generadora devuelve un objeto generador: todavía NO ejecuta ningún código. El código se ejecuta durante la iteración.
def gen():
    print('start')
    yield 1
    print('middle')
    yield 2
g = gen()  # no print yet
print(next(g))  # 'start', then 1

Generador infinito

def naturals(n=0): while True: yield n; n+=1 es una secuencia infinita. Úselo con islice o break.
def naturals(n=0):
    while True:
        yield n
        n += 1
import itertools
print(list(itertools.islice(naturals(), 5)))

yield from

yield from sub_gen() delega en un subgenerador y reenvía todos sus valores. Equivale a for x in sub: yield x.
def chain(*iters):
    for it in iters:
        yield from it
print(list(chain([1,2], [3,4], [5])))

Enviar valores con send()

gen.send(value) reanuda el generador y, además, le pasa un valor que se convierte en el resultado de la expresión yield.
def accumulator():
    total = 0
    while True:
        n = yield total
        if n is None: break
        total += n
g = accumulator()
next(g)  # prime
print(g.send(10))
print(g.send(5))

Estado del generador

Un generador se pausa en cada yield y conserva sus variables locales entre llamadas, por lo que actúa como una corrutina natural.
def stateful():
    seen = set()
    while True:
        item = yield
        seen.add(item)
        yield len(seen)
g = stateful()
next(g); g.send('a'); print(next(g)); g.send('b'); print(next(g))

Cerrar un generador

gen.close() lanza GeneratorExit dentro del generador. Use try/finally dentro del generador para realizar tareas de limpieza.
def resource_gen():
    try:
        while True:
            yield
    finally:
        print('cleaned up')
g = resource_gen()
next(g)
g.close()

StopIteration y return

return value en un generador establece el atributo value de la excepción StopIteration. yield from lo utiliza para recuperar ese valor.
def gen_with_return():
    yield 1
    yield 2
    return 'done'
g = gen_with_return()
try:
    while True: print(next(g))
except StopIteration as e:
    print('returned:', e.value)

Generador de Fibonacci

Los generadores son excelentes para secuencias matemáticas infinitas: yield a; a, b = b, a+b
def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b
import itertools
print(list(itertools.islice(fibonacci(), 10)))

Generadores frente a clases con __iter__

Los generadores son más sencillos que escribir una clase con __iter__ y __next__. Use generadores para secuencias directas.
# Generator is simpler than:
# class Counter:
#     def __iter__(self): return self
#     def __next__(self): ...
print('generators simplify iterators')

Comprobación rápida

¿Qué hace yield from sub() en una función generadora?

Repaso

yield pausa una función generadora. Las funciones generadoras devuelven un objeto generador. yield from delega en subgeneradores. send() pasa valores. close() activa la limpieza.

Continúe

¡Excelente! Continúe con la siguiente lección para profundizar sus conocimientos.

Preguntas frecuentes

¿La lección «La palabra clave yield» es gratis?

Sí — el texto completo de «La palabra clave yield» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.

¿Qué aprenderé en «La palabra clave yield»?

Escriba funciones generadoras con yield para crear iteradores personalizados. Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Python Academy?

No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «La palabra clave yield»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Python Academy?

Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Comprensiones de listas
  2. Comprensiones de conjuntos y diccionarios
  3. Expresiones generadoras
  4. La palabra clave yield
← Volver a Python Academy