Uma list comprehension constrói a lista inteira em memória na hora; uma generator expression devolve um iterador preguiçoso que produz itens um por vez conforme você consome. Generators usam memória constante e podem começar a entregar antes de a fonte acabar, mas você só consegue iterar uma vez e não dá para indexar nem pegar o tamanho.
Por que os entrevistadores perguntam isso
Parece trivia de sintaxe, mas na verdade é sobre consciência de memória. Os entrevistadores usam isso para ver se você pensa no tamanho dos seus dados antes de escrever um one liner, e se você sabe qual troca está fazendo ao substituir colchetes por parênteses. A limitação de passada única é a parte que os candidatos esquecem, e ela causa bugs reais quando alguém itera o mesmo generator duas vezes e silenciosamente não recebe nada.
Como estruturar sua resposta
- Diga eager versus lazy em uma linha.
- Dê a consequência de memória.
- Cite o que generators não conseguem fazer.
- Diga qual é o seu padrão e por quê.
Exemplo de resposta
Colchetes me dão uma lista totalmente materializada antes de a próxima linha rodar, enquanto parênteses me dão um generator que calcula cada item sob demanda. Para algumas centenas de itens a diferença é ruído, então eu uso lista porque é mais fácil de depurar e eu posso olhar duas vezes. No momento em que a fonte é um arquivo, um cursor de banco ou um paginador de API, eu mudo para generator. Num job de reconciliação em que trabalhei, ler um export grande para uma lista estourava o limite de memória do container e ele ficava sendo morto, e trocar um par de colchetes por parênteses derrubou o pico de memória para alguns megabytes porque a gente só segurava uma linha por vez. O detalhe é que um generator se esgota depois de uma passada. Já vi alguém logar a contagem de um generator e depois iterar sobre ele, e o corpo do loop nunca executou. Se eu preciso dos dados mais de uma vez, eu materializo de propósito e aceito o custo de memória.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- O que o operador walrus muda dentro de uma comprehension?
- Como você encadearia vários generators?
- Quando uma set comprehension faz mais sentido?
Mais perguntas para Desenvolvedor Python
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas