Introdução
Bem-vindo à vibrante comunidade subterrânea de "Subterra", uma cidade futurista onde mentes brilhantes trabalham sob a superfície da Terra. Neste refúgio subterrâneo, as inovações em tecnologia e ciência florescem sem as restrições das sociedades tradicionais da superfície. Você assume o papel de um cientista em ascensão, conhecido por sua capacidade de criar código poderoso que impulsiona os avanços da comunidade.
Seu objetivo é projetar uma série de decoradores Python que capacitem seus colegas cientistas a medir, aprimorar e encapsular funcionalidades em seus experimentos e aplicações. Esses decoradores serão essenciais para otimizar o uso de recursos, proteger protocolos e rastrear os resultados experimentais. Seu trabalho aqui irá otimizar o fluxo de trabalho de Subterra, causando um impacto significativo no futuro da exploração e desenvolvimento subterrâneo.
Entendendo Decoradores
Nesta etapa, você será introduzido ao conceito de decoradores Python. Decoradores são um recurso exclusivo do Python que permite modificar o comportamento de funções ou métodos.
Abra um arquivo Python para definir seu primeiro decorador:
Nome do arquivo: ~/project/decorator.py
def my_decorator(func):
def wrapper():
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
## Test the decorated function
say_hello()
Neste exemplo, my_decorator é uma função que recebe outra função func como entrada e define uma função aninhada wrapper que adiciona comportamento extra antes e depois de chamar func. A sintaxe @my_decorator aplica o decorador à função say_hello.
Execute o código no arquivo e observe a saída:
$ python3 ~/project/decorator.py
Something is happening before the function is called.
Hello!
Something is happening after the function is called.
Aprimorando Decoradores
Agora que você entende o básico, vamos aprimorar seus decoradores. Você criará um decorador que não apenas envolve uma função, mas também aceita argumentos.
No mesmo arquivo, defina o seguinte decorador:
def do_twice(func):
def wrapper_do_twice(*args, **kwargs):
func(*args, **kwargs)
func(*args, **kwargs)
return wrapper_do_twice
@do_twice
def greet(name):
print(f"Hello {name}!")
## Test the decorated function
greet("World")
Este decorador executará a função decorada duas vezes. Observe o uso de *args e **kwargs para permitir que o wrapper aceite qualquer número de argumentos posicionais e de palavras-chave.
Execute o código no arquivo e observe a saída:
$ python3 ~/project/decorator.py
Hello World!
Hello World!
Resumo
Neste laboratório, você foi guiado pelo processo de compreensão e implementação de decoradores Python. Você aprendeu a criar decoradores simples, aceitar argumentos de função dentro de decoradores e aplicá-los para modificar o comportamento de suas funções. Decoradores são um recurso poderoso do Python que permite aprimoramentos de código limpos e reutilizáveis.
Ao final deste laboratório, você deve se sentir confortável com a criação e o uso de decoradores e reconhecer seu potencial em aplicações do mundo real.



