Pular para o conteúdo principal

Questão de Programação — Python — Quadrix 2023

ProgramaçãoPython
Código
qg026002
Banca
Quadrix
Órgão
CREA-GO
Ano
2023
Nível
Superior
Cargo
Analista de Área - T.I
No que concerne à linguagem de programação Python e à linguagem de modelagem unificada (UML), julgue o item.Em Python, o argumento optimize da função compile() especifica o nível de otimização do compilador.
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Python: a função compile() e o argumento optimize

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.

  1. 10 — sem otimização
  2. 21 — remove assert
  3. 32 — remove assert e docstrings
LEVEL · soulevel.com.br

Alternativa C — ✅ Correta ⟵ GABARITO

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.

PEGA ESSA DICA!

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