Questão de Programação — Linguagens de programação — Quadrix 2025
- Código
- qg594765
- Banca
- Quadrix
- Órgão
- CFBio
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista de Sistemas
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: Certo (C). A expressão sum(x**2 for x in range(1000000)) é, de fato, uma generator expression (expressão geradora) em Python, que gera os valores sob demanda, sem armazená-los integralmente na memória, tornando o processamento mais eficiente para grandes volumes de dados. Essa é uma característica central dos geradores na linguagem.
Para entender por que a afirmação está correta, é preciso compreender a diferença entre uma list comprehension e uma generator expression. Uma list comprehension ([x**2 for x in range(1000000)]) cria e armazena uma lista completa com todos os um milhão de elementos na memória antes de passá-la para a função sum(). Já uma generator expression ((x**2 for x in range(1000000))) cria um objeto gerador que, quando iterado, calcula cada valor individualmente, um por vez, e o descarta após o uso. No caso da expressão do enunciado, os parênteses são opcionais quando a expressão geradora é o único argumento de uma função, como em sum(x**2 for x in range(1000000)).
Essa característica de "gerar sob demanda" (lazy evaluation) é o que torna os geradores eficientes para grandes volumes de dados: em vez de alocar memória para todos os valores de uma vez, eles são produzidos e consumidos incrementalmente. Isso reduz drasticamente o consumo de memória, especialmente em operações sobre sequências muito grandes ou infinitas. A função sum() itera sobre o gerador, somando cada valor à medida que ele é produzido, sem nunca ter a lista completa em memória.
A pegadinha que a banca poderia explorar é confundir a generator expression com a list comprehension. A diferença sintática é sutil: colchetes [] para a lista e parênteses () para o gerador. No entanto, o comportamento é radicalmente diferente em termos de uso de memória. Enquanto a list comprehension materializa todos os elementos, a generator expression os produz sob demanda. É exatamente essa distinção que a questão testa.
Guarde a fronteira entre list comprehension (armazena tudo) e generator expression (gera sob demanda): é nela que a questão se decide.
A afirmação está correta. A expressão sum(x**2 for x in range(1000000)) utiliza uma generator expression, que é um tipo de gerador em Python. Geradores são iteráveis que produzem valores sob demanda, sem armazenar todos os elementos na memória de uma só vez. Isso torna o processamento mais eficiente para grandes volumes de dados, pois o consumo de memória é reduzido. A função sum() consome o gerador elemento a elemento, somando cada valor à medida que é produzido, sem nunca materializar a lista completa de um milhão de quadrados.
Gabarito: Certo (C)
Link permanente: /questoes/qg594765