حكاية مصممي بايثون

صورة



بسيط هو أفضل من المجمع.

مواد لأولئك الذين سمعوا بالفعل عن المصممين ، لكنهم لا يفهمون سبب الحاجة إليها وكيفية استخدامها في مشاريعهم.



اسمحوا لي أن أذكرك أن المصمم هو وظيفة تسمح لك بلف وظيفة أخرى لتوسيع وظائفها دون تغيير رمزها مباشرة. يمكن العثور على مزيد من التفاصيل على سبيل المثال هنا



لنبدأ.



منذ زمن بعيد ، في مشروع كبير ومريح ، استمرت الوظيفة 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]>


كان أوليغ مسرورًا وأراد إعادة كتابة الكود الكامل لمشروع كبير ومريح ، لكنه سرعان ما سئم من إجراء التغييرات وأصبح حزينًا.

فكر أوليغ في 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