मैं thecodeship पर एक महान ट्यूटोरियल से सजावटी के बारे में कुछ सीख रहा हूं लेकिन मुझे एक उदाहरण से भ्रमित पाया गया है।पायथन सजावट उदाहरण
पहला सजावट इसके बाद एक सजावट के लिए एक स्पष्टीकरण दिया जाता है।
def p_decorate(func):
def func_wrapper(name):
return "<p>{0}</p>".format(func(name))
return func_wrapper
def get_text(name):
return "lorem ipsum, {0} dolor sit amet".format(name)
my_get_text = p_decorate(get_text)
print my_get_text("John")
अब यह मुझे समझ में आता है। एक सजावट बस एक समारोह के लिए एक रैपर है। और इन लोगों में स्पष्टीकरण में कहा गया है कि एक सजावट एक ऐसा कार्य है जो तर्क के रूप में एक और कार्य करता है, एक नया कार्य उत्पन्न करता है, और जेनरेट किए गए फ़ंक्शन को कहीं भी उपयोग करने के लिए देता है।
और अब ऊपर कोड के बराबर है:
def p_decorate(func):
def func_wrapper(name):
return "<p>{0}</p>".format(func(name))
return func_wrapper
@p_decorate
def get_text(name):
return "lorem ipsum, {0} dolor sit amet".format(name)
print get_text("John")
मेरा मानना है कि मैं जिस तरह से जब कोई तर्क दिया एक डेकोरेटर आरंभ नहीं हो जाता समझते हैं। अगर मैं ग़लत हूं तो मेरी गलती सुझाएं।
- डिफ़ॉल्ट रूप से डेकोरेटर समारोह
get_text
में गुजरता है और क्योंकिp_decorate
एक समारोहfunc_wrapper
देता है, हम सच्चा बयानget_text = func_wrapper
साथ खत्म।
मेरे लिए महत्वपूर्ण है कि पहला कोड ब्लॉक बराबर है, क्योंकि मैं देखता हूं और समझता हूं कि सजावट कैसा व्यवहार कर रही है। , फिर
def tags(tag_name):
def tags_decorator(func):
def func_wrapper(name):
return "<{0}>{1}</{0}>".format(tag_name, func(name))
return func_wrapper
return tags_decorator
@tags("p")
def get_text(name):
return "Hello "+name
print get_text("John")
मुझे ठीक कर लें मैं गलत हूँ लेकिन यह मेरी समझ है:
क्या बहुत ज्यादा मुझे confuses निम्नलिखित कोड है।
- सजावटी डिफ़ॉल्ट फ़ंक्शन नाम के बजाय टैग स्ट्रिंग "पी" स्वीकार करता है। और बदले में फ़ंक्शन
tags_decorator
मानता है कि जिस पैरामीटर को पारित किया जाएगा वह सजाया जा रहा है,get_text
।
मेरे लिए "गैर-सजावटी" रूप में कोड के समकक्ष ब्लॉक को देखने में मददगार हो सकता है, लेकिन ऐसा लगता है कि यह मेरे सिर को लपेटने के लिए प्रतीत नहीं होता है। मैं यह भी समझ नहीं पा रहा हूं कि क्यों tags_decorator
और func_wrapper
दोनों लौट आए हैं। यदि सजावट करने वाले को get_text
को लपेटने के लिए केवल 1 फ़ंक्शन वापस करने की आवश्यकता होती है तो दो अलग-अलग कार्यों को वापस करने का उद्देश्य क्या है।
एक साइड नोट के रूप में, यह वास्तव में निम्न पर आता है।
- क्या यह ब्लॉक 3 कार्यों के सेट से कम कुछ के लिए सरलीकृत किया जा सकता है?
- सजावटी कोड को सरल बनाने के लिए 1 से अधिक तर्क स्वीकार कर सकते हैं?
धन्यवाद। और मैंने आपकी प्रतिक्रिया के बाद एक छोटा सा संपादन किया। फ़ंक्शंस के इन सेट वास्तव में 2 फ़ंक्शंस क्यों लौटाते हैं और 1 नहीं? – Max
@ मैक्स: मेरा नवीनतम संपादन देखें। एक सजावटी (सजावटी कारखाने द्वारा उत्पादित) है, दूसरा मूल कार्य को बदलने वाले रैपर है, सजावट का परिणाम। –
अब मैं समझता हूं, 2 फ़ंक्शन कॉल का उद्देश्य। मैं अपने अंतिम रैपर को और निर्दिष्ट करने के लिए सजावटी कारखाने के साथ एक विशिष्ट सजावटी बनाने में सक्षम हूं। – Max