Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Introdução aos Decoradores | Dominando Iteradores e Decoradores em Python
Conceitos de Programação Funcional em Python

bookIntrodução aos Decoradores

Deslize para mostrar o menu

Note
Definição

Um decorator em Python é uma função de ordem superior que recebe outra função como argumento e retorna uma nova função que estende ou altera o comportamento da função original.

Decorators são um recurso fundamental em Python que permitem modificar ou aprimorar o comportamento de funções ou métodos sem alterar diretamente seu código. Em essência, decorators são funções de ordem superior — recebem outra função como argumento, estendem ou alteram seu comportamento e retornam uma nova função. Em Python, a sintaxe para aplicar um decorator é o símbolo @ seguido do nome do decorator, colocado diretamente acima da definição da função.

Casos de uso comuns para decorators incluem:

  • Registro de logs;
  • Medição do tempo de execução de funções;
  • Controle de acesso ou permissões;
  • Memoização (cache de resultados);
  • Validação de entrada.

Decorators permitem manter esse tipo de lógica separada da lógica principal do negócio, resultando em código mais limpo e fácil de manter. Ao dominar decorators, é possível utilizar uma ferramenta poderosa para escrever código Python reutilizável e expressivo.

12345678910111213
def simple_decorator(func): def wrapper(*args, **kwargs): print("Before the function call") result = func(*args, **kwargs) print("After the function call") return result return wrapper @simple_decorator def greet(name): print(f"Hello, {name}!") greet("Alice")
copy

Compreendendo args e kwargs em Definições de Funções

Ao escrever decoradores e wrappers, frequentemente é necessário lidar com funções que recebem qualquer quantidade ou tipo de argumentos. O Python fornece *args e **kwargs para tornar isso possível.

  • *args coleta quaisquer argumentos posicionais extras passados para uma função em uma tupla;
  • **kwargs coleta quaisquer argumentos nomeados extras em um dicionário.

Essa flexibilidade é fundamental para decoradores. Um decorador deve ser capaz de aceitar e repassar todos os argumentos para a função original, independentemente de quantos ou quais sejam. Sem *args e **kwargs, seu decorador funcionaria apenas com funções que possuem uma assinatura fixa, limitando a reutilização.

123456789101112
def my_decorator(func): def wrapper(*args, **kwargs): print("Arguments:", args) print("Keyword arguments:", kwargs) return func(*args, **kwargs) return wrapper @my_decorator def example(a, b, greeting="Hello"): print(f"{greeting}, {a} and {b}!") example(1, 2, greeting="Hi")
copy

Essa abordagem garante que seu decorador possa envolver qualquer função, tornando seu código robusto e reutilizável.

1. Qual é a finalidade do símbolo @ em Python?

2. Como um decorador modifica o comportamento de uma função?

question mark

Qual é a finalidade do símbolo @ em Python?

Selecione a resposta correta

question mark

Como um decorador modifica o comportamento de uma função?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 1

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 4. Capítulo 1
some-alt