
Einfach ist besser als komplex.
Material für diejenigen, die bereits von Dekorateuren gehört haben, aber nicht verstehen, warum sie benötigt werden und wie sie in ihren Projekten verwendet werden.
Ich möchte Sie daran erinnern, dass ein Dekorateur eine Funktion ist, mit der Sie eine andere Funktion umschließen können, um ihre Funktionalität zu erweitern, ohne ihren Code direkt zu ändern. Weitere Details finden Sie zum Beispiel hier
Lasst uns beginnen.
Vor langer Zeit lebte und arbeitete die Veranstaltung in einem großen, gemütlichen Projekt fetch_webpage:
import requests
def fetch_webpage():
webpage = requests.get('https://google.com')
return webpage
fetch_webpage()
Aus:
<Response [200]>
Dann kamen Manager und wollten messen, wie viel es funktioniert, diese Funktion, . . :
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 war begeistert und wollte den gesamten Code eines großen und gemütlichen Projekts neu schreiben, aber er wurde schnell müde, Änderungen vorzunehmen, und wurde traurig.
Oleg dachte 3 Sprints und 3 Tage, erinnerte sich an die Dekorateure und war wieder sehr glücklich. So können Sie dieses Problem mit einem Dekorateur lösen:
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()
Aus:
: 0.15940594673156738 .
<Response [200]>
Hier freuten sich alle Manager, begannen sich gegenseitig zu gratulieren, mit der Tatsache, dass nun alle Funktionen sein werden zahm, nicht wild messbar, und Oleg erhielt sogar eine Medaille oder einen Auftrag, ich erinnere mich nicht genau.