Llamar a una función generadora no ejecuta nada del cuerpo; devuelve un objeto generador. El cuerpo se ejecuta solo cuando llamas a next sobre él, corriendo hasta el primer yield, que suspende el frame con sus variables locales intactas. Cada next posterior retoma exactamente donde se paró. Cuando el cuerpo termina, el generador lanza StopIteration, que un bucle for captura por ti.
Por qué lo preguntan los entrevistadores
Esto tantea si entiendes la ejecución suspendida, que es el modelo mental detrás de los iteradores, de los context managers escritos con contextlib y de las corrutinas asíncronas. Un entrevistador nota en dos frases si solo has usado generadores o si sabes que el frame se conserva entre yields. Además prepara el terreno para repreguntas sobre el protocolo de iterador y sobre send y throw.
Cómo estructurar tu respuesta
- Di que la llamada devuelve un objeto y no ejecuta nada.
- Describe el ciclo de suspensión y reanudación alrededor del yield.
- Explica cómo ve el bucle que ha terminado.
- Conéctalo con el protocolo de iterador.
Ejemplo de respuesta
Llamarla no hace casi nada. Python ve la palabra clave yield en tiempo de compilación, marca la función como generadora, y la llamada solo te devuelve un objeto generador con el frame congelado. Nada del cuerpo se ha ejecutado todavía, y eso descoloca a quien espera que su validación de las primeras líneas salte de inmediato. El primer next corre hasta llegar a un yield, saca ese valor y congela el frame con todas las locales aún vivas. Llamas a next otra vez y la ejecución sigue en la línea posterior al yield. Cuando la función llega al final o encuentra un return pelado, Python lanza StopIteration, y un bucle for lo interpreta como la señal de parar. Por debajo, un generador cumple el protocolo de iterador porque tiene tanto dunder iter como dunder next, así que funciona en cualquier sitio donde se espere un iterable. Me apoyo en esto para pipelines de streaming. En un proyecto teníamos cuatro etapas de transformación encadenadas como generadores, y ninguna etapa llegó nunca a tener más de un registro a la vez.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Qué te aporta yield from?
- ¿Cómo funcionan send y throw en un generador?
- ¿En qué se diferencia un generador asíncrono?
Más preguntas para Desarrollador Python
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas