Como pode ser utilizado o módulo functools para criar um dec...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Tema central da questão: O assunto principal é a memoização de funções em Python usando o módulo functools. Isso está relacionado à programação eficiente, especialmente quando é necessário evitar cálculos repetidos em funções chamadas diversas vezes com os mesmos argumentos.
Conceitos essenciais para resolver a questão: Memoização é uma técnica de otimização onde os resultados de execuções de funções são armazenados (em cache), para serem reutilizados em chamadas futuras com os mesmos parâmetros. Em Python, o functools.lru_cache() é o recurso padrão mais eficiente e prático para esse fim. Ele cria um cache automático, considerando todos os argumentos passados para a função.
Justificativa e análise da alternativa correta (C): A alternativa C corretamente indica a utilização do functools.lru_cache() para armazenar resultados de chamadas, ou seja, implementar memoização em funções de múltiplos argumentos. Isso é feito de forma simples:
Exemplo:
from functools import lru_cache
@lru_cache(maxsize=128)
def calcula(x, y):
return x*y + y
Assim, múltiplos argumentos são tratados automaticamente, com o cache baseado na tupla dos valores recebidos.
Análise crítica das alternativas incorretas:
A) functools.wraps mantém metadados de funções ao criar decoradores, mas não armazena resultados, nem implementa cache.
B) functools.partial serve para fixar determinados argumentos em funções, criando uma nova função, mas não faz memoização.
D) functools.reduce aplica uma função cumulativamente a itens de uma sequência, sem relação com cache ou memoização.
E) functools.update_wrapper atualiza atributos do wrapper de função, útil para criar decoradores amigáveis, mas não implementa cache.
Dica de prova: Palavras como “armazenar resultados”, “memoização” e “cache” devem remeter automaticamente ao lru_cache. Atenção para não confundir nomes semelhantes (como wraps ou update_wrapper) que tratam apenas de metadados.
Portanto, a alternativa C é a correta!
Gostou do comentário? Deixe sua avaliação aqui embaixo!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo