Analise o código Python a seguir. def calcula(n): return lambda x : x * n fcalcula = calcula(3) print(fcalcula(7)) Assinale o valor exibido pela execução desse código.
- A)3
Errada, porque 3 é o valor de n capturado pela função, não o resultado da chamada final.
- B)7
Errada, porque 7 é o valor passado para x, mas ele ainda precisa ser multiplicado por n.
- C)21
Certa, pois fcalcula(7) calcula 7 * 3, resultando em 21.
- D)undefined
Errada, porque o código é válido em Python e a chamada produz um número, não erro ou valor indefinido.
Gabarito: C
Esse código explora uma ideia bem comum em Python: funções que retornam outras funções. A função calcula recebe n e devolve uma lambda, isto e, uma função anônima que vai usar esse n guardado lá dentro. Isso é um fechamento (closure): a função interna “lembra” do valor recebido pela externa. Aqui, calcula(3) cria uma função equivalente a lambda x: x * 3. Depois, fcalcula passa a ser essa função pronta para uso. Quando o programa executa fcalcula(7), ele troca x por 7 e faz 7 * 3. Em Python, a ordem da multiplicação não muda o resultado, então tanto faz pensar em x * n ou n * x, desde que os valores sejam 7 e 3. Por isso, o valor exibido é 21. A banca costuma cobrar exatamente essa leitura: entender que a lambda não executa na hora em que é criada, mas só quando é chamada, já com o valor de n preservado no ambiente da função externa.