Pregunta de entrevista para Desarrollador Python

¿Cuál es la diferencia entre una list comprehension y una expresión generadora?

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

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

Ejemplo hablado, en primera persona

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 funciona

Preguntas 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

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot