Decorators
Explicação
"Decorators" conseguem modificar o comportamento de uma função/método sem alterar seu código fonte. Eles são como uma camada extra que você pode adicionar em torno de uma função, permitindo que seja executado um código adicional antes ou depois dela, ou até mesmo substituir completamente sua funcionalidade.
Como Funcionam os Decorators na prática?
Um "decorator" é basicamente uma função que recebe outra função como argumento e retorna uma nova função que geralmente estende ou modifica o comportamento da função original. A função original é então substituída pela nova função retornada pelo decorator.
Demonstração
-
Importa as bibliotecas necessárias para o exemplo:
from time import perf_counter # coleta de tempo from datetime import timedelta # formata tempo fornecido pela lib acima from selenium import webdriver # navegação na web from selenium.webdriver.chrome.service import Service # instancia webdriver from selenium.webdriver.common.by import By # apoia busca de elementos na página web
-
Para esse exemplo, será necessário ter o Selenium.
-
Caso não tenha, basta executar o comando no CMD/Terminal:
-
-
Cria o decorator "@tempo_medio_funcao":
def tempo_medio_funcao(func): # o nome dessa função representa o decorator e ira fornecer a função encapsulada def wrapper(*args, **kwargs): # funcao interna com nome generico que conterá as funcionalidades desejadas inicial = perf_counter() # coleta tempo inicial func(*args, **kwargs) # executa função a ser cronometrada final = perf_counter() # coleta tempo final tempo = final - inicial # efetua subtracao para identificar tempo médio da execução return f'O tempo da função "{func.__name__}" foi de {timedelta(seconds=tempo)} (sem formatação: {tempo})' # Retorna mensagem final return wrapper
-
Atribui o decorator "@tempo_medio_funcao" na função "requisite_site" para checar o tempo médio da sua execução
-
Executa a função "requisite_site" e emite o resultado na tela