
Sederhana lebih baik daripada kompleks.
Bahan untuk mereka yang sudah pernah mendengar tentang dekorator, tetapi tidak mengerti mengapa mereka dibutuhkan dan bagaimana menggunakannya dalam proyek mereka.
Izinkan saya mengingatkan Anda bahwa dekorator adalah fungsi yang memungkinkan Anda menggabungkan fungsi lain untuk memperluas fungsinya tanpa mengubah kodenya secara langsung. Detail lebih lanjut dapat ditemukan misalnya di sini
Ayo mulai.
Dahulu kala, dalam proyek yang besar dan nyaman, fungsinya hidup dan bekerja fetch_webpage:
import requests
def fetch_webpage():
webpage = requests.get('https://google.com')
return webpage
fetch_webpage()
Di luar:
<Response [200]>
Kemudian manajer datang dan ingin mengukur seberapa berhasil, fungsi ini, . . :
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 senang dan ingin menulis ulang seluruh kode proyek yang besar dan nyaman, tetapi dia cepat lelah membuat perubahan dan menjadi sedih.
Oleg memikirkan 3 sprint dan 3 hari, ingat para dekorator dan sangat bahagia lagi. Beginilah cara Anda mengatasi masalah ini dengan dekorator:
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()
Di luar:
: 0.15940594673156738 .
<Response [200]>
Di sini semua manajer sangat senang, mulai saling memberi selamat, dengan fakta bahwa sekarang semua fungsi akan berjalan jinak, tidak liar terukur, dan Oleg bahkan diberi medali atau perintah, saya tidak ingat persis.