Kisah dekorator Python

gambar



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.




All Articles