Una list comprehension construye la lista entera en memoria de inmediato; una expresión generadora devuelve un iterador perezoso que produce los elementos de uno en uno según los consumes. Los generadores usan memoria constante y pueden empezar a devolver valores antes de agotar la fuente, pero solo puedes recorrerlos una vez y no puedes indexarlos ni pedirles la longitud.
Por qué lo preguntan los entrevistadores
Parece trivia de sintaxis, pero en realidad va de conciencia de memoria. Los entrevistadores la usan para ver si piensas en el tamaño de tus datos antes de escribir una línea ingeniosa, y si sabes qué estás cambiando cuando sustituyes corchetes por paréntesis. La limitación de una sola pasada es la parte que los candidatos olvidan, y provoca bugs reales cuando alguien recorre el mismo generador dos veces y en silencio no obtiene nada.
Cómo estructurar tu respuesta
- Di en una línea la diferencia entre evaluación inmediata y perezosa.
- Da la consecuencia en memoria.
- Nombra lo que los generadores no pueden hacer.
- Di cuál usas por defecto y por qué.
Ejemplo de respuesta
Los corchetes me dan una lista que queda materializada entera antes de que corra la siguiente línea, mientras que los paréntesis me dan un generador que calcula cada elemento bajo demanda. Para unos cientos de elementos la diferencia es ruido, así que uso una lista porque es más fácil de depurar y puedo mirarla dos veces. En cuanto la fuente es un fichero, un cursor de base de datos o un paginador de una API, me paso a un generador. En un job de conciliación en el que trabajé, cargar una exportación grande en una lista pasaba el contenedor de su límite de memoria y lo mataban una y otra vez, y cambiar un par de corchetes por paréntesis bajó el pico de memoria a unos pocos megabytes porque solo teníamos una fila en cada momento. La pega es que un generador queda agotado tras una pasada. He visto a alguien loguear el conteo de un generador y luego iterarlo, y el cuerpo del bucle no se ejecutó nunca. Si necesito los datos más de una vez, los materializo a propósito y asumo la memoria.
¿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é cambia el operador morsa dentro de una comprehension?
- ¿Cómo encadenarías varios generadores?
- ¿Cuándo tiene más sentido una set comprehension?
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