Python装饰器的故事

图片



简单胜于复杂。

给那些已经听说过装饰器但不了解为什么需要装饰器以及如何在项目中使用它们的人的材料。



让我提醒您,装饰器是一个函数,它使您可以包装另一个函数以扩展其功能,而无需直接更改其代码。可以在此处找到更多详细信息,例如



开始吧。



很久以前,在一个大型的,舒适的项目中,该功能一直存在并起作用fetch_webpage



import requests

def fetch_webpage():
    webpage = requests.get('https://google.com')
    return webpage

fetch_webpage()


出:



<Response [200]>


然后,管理人员来了,想要衡量它的功能,功能, 晚上是否太晚了. . :



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很高兴并且想要重写一个大型而舒适的项目的整个代码,但是他很快就厌倦了进行更改并感到难过。

奥列格(Oleg)考虑了3个冲刺和3天,想起了装饰工,再次感到非常高兴。这是使用装饰器解决此问题的方法:



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()


出:



 : 0.15940594673156738 .
<Response [200]>


在这里,所有经理都很高兴,开始互相祝贺,事实是现在所有职能都将 驯服,不野 可测量的,甚至连奥列格都获得了勋章或命令,我都不记得了。




All Articles