Questão de Programação — Python — Quadrix 2023
- Código
- qg026002
- Banca
- Quadrix
- Órgão
- CREA-GO
- Ano
- 2023
- Nível
- Superior
- Cargo
- Analista de Área - T.I
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: ✅ CERTO. A afirmação está correta: em Python, a função embutida compile() aceita o argumento optimize, que especifica o nível de otimização aplicado ao compilar o código-fonte para bytecode. Esse argumento é um inteiro que pode ser 0 (sem otimização), 1 (remove asserções) ou 2 (remove também docstrings), conforme a documentação oficial da linguagem.
A função compile() é uma das funções embutidas (built-in) do Python. Ela compila uma string contendo código-fonte em um objeto de código (code object), que pode então ser executado pela função exec() ou avaliado por eval(). A assinatura completa é compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1). O parâmetro optimize controla o nível de otimização do compilador, exatamente como afirma o enunciado.
O nível de otimização funciona assim: com optimize=0 (o padrão), o compilador mantém as asserções (assert) e as docstrings no bytecode. Com optimize=1, as instruções assert são removidas do bytecode, mas as docstrings permanecem. Com optimize=2, tanto as asserções quanto as docstrings são removidas. Esse comportamento é análogo à flag -O da linha de comando do interpretador (python -O), que também ativa otimizações removendo asserções.
Na prática, o argumento optimize é útil quando se deseja gerar bytecode mais enxuto ou quando se quer desabilitar asserções em código de produção por questões de desempenho. Por exemplo, ao compilar um módulo com compile('assert x > 0', '<string>', 'exec', optimize=1), a instrução assert será removida do bytecode resultante, o que pode acelerar a execução em cenários onde as asserções são desnecessárias.
É importante distinguir compile() de outras funções relacionadas, como exec() e eval(). Enquanto compile() apenas transforma o código-fonte em um objeto de código, exec() executa esse objeto (ou uma string diretamente) e eval() avalia uma expressão e retorna o resultado. O argumento optimize é exclusivo de compile(), o que reforça a correção da afirmação.
A pegadinha que a banca poderia explorar é confundir o argumento optimize com outros parâmetros da função, como flags ou dont_inherit, que controlam aspectos diferentes da compilação. No entanto, a afirmação é precisa e direta, sem armadilhas.
A afirmação está correta porque o argumento optimize da função compile() realmente especifica o nível de otimização do compilador. Conforme a documentação oficial do Python, optimize é um inteiro que determina o nível de otimização: 0 (sem otimização), 1 (remove asserções) e 2 (remove asserções e docstrings). Esse parâmetro é usado para controlar como o código-fonte é compilado para bytecode, influenciando o desempenho e o tamanho do código gerado.
Para memorizar os níveis de otimização, lembre-se da ordem crescente: 0 = nada removido, 1 = remove assert, 2 = remove assert + docstrings. Essa progressão é a mesma da flag -O e -OO da linha de comando do Python.
Gabarito: ✅ CERTO.
Link permanente: /questoes/qg026002