Questão de Arquitetura de Software — Software — VUNESP 2023
- 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
- A7
- B5
- C12
- D4
- E14
GabaritoA — 7
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.
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 = 7A 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.
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).
Conforme explicado, o resultado é 7.
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.
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).
Seria 4 se apenas f1(3) fosse impresso, ou se o aluno somasse apenas os valores de n (2+2).
Não há lógica que produza 14 a partir do código.
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