Pular para o conteúdo principal

Questão de Arquitetura de Software — Software — VUNESP 2023

Arquitetura de SoftwareSoftware
Código
vu079931
Banca
VUNESP
Órgão
TRF - 3ª REGIÃO
Ano
2023
Nível
Superior
Cargo
Analista Judiciário / Área: Apoio Especializado - Especialidade: Informática
Observe o seguinte trecho de código escrito na linguagem Python.def f(n):return lambda a : 1 + nf1 = f(2)f2 = f(3)print(f1(3) + f2(1))Analisando esse trecho de código é correto afirmar que ele irá imprimir o valor
  1. A7
  2. B5
  3. C12
  4. D4
  5. E14
Revelar gabarito e comentário

GabaritoA — 7

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”.

Execução de código Python com closures

Gabarito: letra A (7). O código define uma função f(n) que retorna uma função lambda que sempre retorna 1 + n, ignorando o argumento a. Ao atribuir f1 = f(2) e f2 = f(3), criam-se duas closures que capturam os valores 2 e 3, respectivamente. Assim, f1(3) retorna 1+2=3 e f2(1) retorna 1+3=4, somando 7.

Análise do código

def f(n):
    return lambda a: 1 + n

f1 = f(2)   # lambda a: 1+2 → sempre 3
f2 = f(3)   # lambda a: 1+3 → sempre 4

print(f1(3) + f2(1))  # 3 + 4 = 7

A função f recebe n e retorna uma função anônima (lambda) que recebe a mas não o utiliza no corpo; o corpo é 1 + n, onde n é a variável capturada do escopo externo (closure). Cada chamada de f cria um novo escopo com seu próprio n.

NÃO CAIA NESSA!

O parâmetro a da lambda está presente na assinatura, mas não é usado no corpo. O aluno pode ser induzido a pensar que o resultado depende do valor passado a f1 ou f2, ou que a soma seria algo como (1+2*3) + (1+3*1). Na verdade, a lambda ignora a e sempre retorna 1 + n (o valor capturado no momento da definição).

Avaliação das alternativas

Alternativa A — ✅ Correta ⟵ GABARITO

Conforme explicado, o resultado é 7.

Alternativa B — ❌ Incorreta (5)

Seria 5 se, por exemplo, f1(3) retornasse 1+3=4 e f2(1) retornasse 1+1=2, o que não ocorre porque n está fixo em 2 e 3.

Alternativa C — ❌ Incorreta (12)

Não há operação que justifique 12. Talvez se o aluno multiplicasse os resultados (3*4) ou somasse os valores originais (2+3+3+1).

Alternativa D — ❌ Incorreta (4)

Seria 4 se apenas f1(3) fosse impresso, ou se o aluno somasse apenas os valores de n (2+2).

Alternativa E — ❌ Incorreta (14)

Não há lógica que produza 14 a partir do código.

  1. 1f(2) retorna lambda a: 1+2
  2. 2f(3) retorna lambda a: 1+3
  3. 3f1(3) = 1+2 = 3
  4. 4f2(1) = 1+3 = 4
  5. 5print(3+4) = 7
LEVEL · soulevel.com.br
PEGA ESSA DICA!

Em funções que retornam lambdas, observe qual variável é capturada no closure. O corpo da lambda é avaliado no momento da chamada, usando o valor da variável do escopo externo no momento da definição (escopo léxico). Ignore parâmetros que não são usados — eles são apenas placeholders.

Gabarito: letra A (7).

Link permanente: /questoes/vu079931