Como pode ser utilizado o módulo functools para criar um dec...

Próximas questões
Com base no mesmo assunto
Q3699136 Programação
Como pode ser utilizado o módulo functools para criar um decorador em Python que memoriza o resultado de funções, considerando múltiplos argumentos?
Alternativas

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