
بسيط هو أفضل من المجمع.
مواد لأولئك الذين سمعوا بالفعل عن المصممين ، لكنهم لا يفهمون سبب الحاجة إليها وكيفية استخدامها في مشاريعهم.
اسمحوا لي أن أذكرك أن المصمم هو وظيفة تسمح لك بلف وظيفة أخرى لتوسيع وظائفها دون تغيير رمزها مباشرة. يمكن العثور على مزيد من التفاصيل على سبيل المثال هنا
لنبدأ.
منذ زمن بعيد ، في مشروع كبير ومريح ، استمرت الوظيفة 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]>
هنا كان جميع المديرين سعداء ، وبدأوا في تهنئة بعضهم البعض ، مع حقيقة أن جميع الوظائف ستكون الآن ترويض لا برية قابل للقياس ، وقد حصل أوليغ على ميدالية أو أمر ، لا أتذكره بالضبط.