Le simple vaut mieux que le complexe.
Matériel pour ceux qui ont déjà entendu parler des décorateurs, mais ne comprennent pas pourquoi ils sont nécessaires et comment les utiliser dans leurs projets.
Permettez-moi de vous rappeler qu'un décorateur est une fonction qui vous permet d'envelopper une autre fonction pour étendre ses fonctionnalités sans changer directement son code. Plus de détails peuvent être trouvés par exemple ici
Commençons.
Il y a longtemps, dans un grand projet cosy, la fonction vivait et fonctionnait fetch_webpage
:
import requests
def fetch_webpage():
webpage = requests.get('https://google.com')
return webpage
fetch_webpage()
En dehors:
<Response [200]>
Puis les managers sont venus et ont voulu mesurer combien cela fonctionne, cette fonction, . . :
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 était ravi et voulait réécrire tout le code d'un projet volumineux et confortable, mais il s'est vite lassé de faire des changements et est devenu triste.
Oleg a pensé à 3 sprints et 3 jours, s'est souvenu des décorateurs et était de nouveau très heureux. Voici comment résoudre ce problème avec un décorateur:
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()
En dehors:
: 0.15940594673156738 .
<Response [200]>
Ici, tous les gestionnaires étaient ravis, ont commencé à se féliciter, avec le fait que maintenant toutes les fonctions seront apprivoisé, pas sauvage mesurable, et Oleg a même reçu une médaille ou un ordre, je ne me souviens pas exactement.