
Simples é melhor que complexo.
Material para quem já ouviu falar de decoradores, mas não entende por que eles são necessários e como utilizá-los em seus projetos.
Deixe-me lembrá-lo de que um decorador é uma função que permite agrupar outra função para estender sua funcionalidade sem alterar diretamente seu código. Mais detalhes podem ser encontrados por exemplo aqui
Vamos começar.
Há muito tempo, em um projeto amplo e aconchegante, a função vivia e funcionava fetch_webpage:
import requests
def fetch_webpage():
webpage = requests.get('https://google.com')
return webpage
fetch_webpage()
Fora:
<Response [200]>
Então os gerentes vieram e queriam medir o quanto funciona, essa função, . . :
import time
import requests
def fetch_webpage():
start = time.time()
webpage = requests.get('https://google.com')
end = time.time()
print(' : {} .'.format(end-start))
return webpage
fetch_webpage()
Out:
: 0.1602182388305664 .
<Response [200]>
KPI.
, , , , .
wrapper, , func . :
import time
import requests
def wrapper(func):
start = time.time()
out = func()
end = time.time()
print(' : {} .'.format(end-start))
return out
def fetch_webpage():
webpage = requests.get('https://google.com')
return webpage
wrapper(fetch_webpage)
Out:
: 0.1602182388305664 .
<Response [200]>
Oleg ficou encantado e queria reescrever todo o código de um projeto grande e aconchegante, mas logo se cansou de fazer alterações e ficou triste.
Oleg pensou em 3 sprints e 3 dias, lembrou-se dos decoradores e ficou muito feliz novamente. É assim que você pode resolver esse problema com um decorador:
import time
import requests
def benchmark(func):
def wrapper():
start = time.time()
out = func()
end = time.time()
print(' : {} .'.format(end-start))
return out
return wrapper
@benchmark
def fetch_webpage():
webpage = requests.get('https://google.com')
return webpage
fetch_webpage()
Fora:
: 0.15940594673156738 .
<Response [200]>
Aqui todos os gestores ficaram encantados, começaram a se parabenizar, com o fato de que agora todas as funções serão domesticado, não selvagem mensuráveis, e Oleg até recebeu uma medalha ou pedido, não me lembro exatamente.