पायथन में फंक्शन डेकोरेटर बनाना और चेनिंग करना

पायथन में फंक्शन डेकोरेटर बनाना और चेनिंग करना
पायथन में फंक्शन डेकोरेटर बनाना और चेनिंग करना

डेकोरेटर्स के साथ पायथन फ़ंक्शंस को बढ़ाना

पायथन में, डेकोरेटर फ़ंक्शंस या विधियों के व्यवहार को संशोधित करने के लिए एक शक्तिशाली उपकरण हैं। वे डेवलपर्स को मौजूदा फ़ंक्शन के चारों ओर अतिरिक्त कार्यक्षमता को साफ़ और पठनीय तरीके से लपेटने की अनुमति देते हैं। डेकोरेटर बनाने और श्रृंखलाबद्ध करने के तरीके को समझकर, आप अपने कोड की मॉड्यूलरिटी और पठनीयता को काफी हद तक बढ़ा सकते हैं।

यह लेख आपको दो विशिष्ट डेकोरेटर बनाने की प्रक्रिया में मार्गदर्शन करेगा: एक टेक्स्ट को बोल्ड बनाने के लिए और दूसरा टेक्स्ट को इटैलिक बनाने के लिए। हम यह भी प्रदर्शित करेंगे कि वांछित आउटपुट प्राप्त करने के लिए इन डेकोरेटर्स को कैसे श्रृंखलाबद्ध किया जाए। इस ट्यूटोरियल के अंत तक, आप एक साधारण फ़ंक्शन को कॉल करने और बोल्ड और इटैलिक दोनों HTML टैग के साथ एक स्वरूपित स्ट्रिंग प्राप्त करने में सक्षम होंगे।

आज्ञा विवरण
def Python में एक फ़ंक्शन को परिभाषित करता है।
f"<b>{func()}</b>" फ़ंक्शन के रिटर्न मान को बोल्ड HTML टैग में लपेटने के लिए एफ-स्ट्रिंग फ़ॉर्मेटिंग का उपयोग करता है।
return wrapper प्रभावी ढंग से डेकोरेटर बनाते हुए, आंतरिक रैपर फ़ंक्शन लौटाता है।
@make_bold मेक_बोल्ड डेकोरेटर को किसी फ़ंक्शन पर लागू करता है।
@add_html_tag("i") किसी फ़ंक्शन पर "i" टैग के साथ add_html_tag डेकोरेटर लागू करता है।
print(say()) सजे हुए आउटपुट को प्रदर्शित करते हुए, उक्त फ़ंक्शन के परिणाम को प्रिंट करता है।
def add_html_tag(tag) अनुकूलन योग्य HTML टैग डेकोरेटर बनाने के लिए एक उच्च-क्रम फ़ंक्शन को परिभाषित करता है।
@add_html_tag("b") किसी फ़ंक्शन पर "b" टैग के साथ add_html_tag डेकोरेटर लागू करता है।

पायथन फंक्शन डेकोरेटर्स को समझना

प्रदान की गई स्क्रिप्ट दर्शाती है कि फ़ंक्शंस के व्यवहार को संशोधित करने के लिए पायथन में फ़ंक्शन डेकोरेटर कैसे बनाएं और श्रृंखलाबद्ध करें। पायथन में एक डेकोरेटर को इसका उपयोग करके परिभाषित किया गया है def एक फ़ंक्शन बनाने के लिए कीवर्ड जो किसी अन्य फ़ंक्शन को तर्क के रूप में लेता है और एक नया फ़ंक्शन लौटाता है। make_bold डेकोरेटर एफ-स्ट्रिंग फ़ॉर्मेटिंग का उपयोग करके HTML बोल्ड टैग के साथ सजाए गए फ़ंक्शन के परिणाम को लपेटता है: f"<b>{func()}</b>". इसी प्रकार, make_italic डेकोरेटर परिणाम को इटैलिक टैग में लपेटता है: f"<i>{func()}</i>". जब इन डेकोरेटर्स का उपयोग करके किसी फ़ंक्शन पर लागू किया जाता है @decorator_name सिंटैक्स, वे संबंधित HTML टैग जोड़कर फ़ंक्शन के आउटपुट को संशोधित करते हैं।

दूसरी स्क्रिप्ट उच्च-क्रम फ़ंक्शन बनाकर अधिक बहुमुखी दृष्टिकोण का परिचय देती है, add_html_tag, जो किसी निर्दिष्ट HTML टैग के लिए डेकोरेटर उत्पन्न करता है। यह फ़ंक्शन एक HTML टैग को तर्क के रूप में लेता है और एक डेकोरेटर लौटाता है जो फ़ंक्शन के आउटपुट को निर्दिष्ट टैग में लपेटता है: f"<{tag}>{func()}</{tag}>". का उपयोग करके @add_html_tag("b") और @add_html_tag("i"), हम आउटपुट को लपेटने के लिए इन डेकोरेटर्स को श्रृंखलाबद्ध कर सकते हैं say_hello बोल्ड और इटैलिक दोनों टैग में कार्य करें, जिसके परिणामस्वरूप वांछित "नमस्ते"। ये उदाहरण स्वच्छ और पुन: प्रयोज्य तरीके से फ़ंक्शन व्यवहार को बढ़ाने और अनुकूलित करने में पायथन डेकोरेटर्स की शक्ति और लचीलेपन को दर्शाते हैं।

पायथन में डेकोरेटर्स को लागू करना और चेनिंग करना

डेकोरेटर बनाने और श्रृंखलाबद्ध करने के लिए पायथन स्क्रिप्ट

def make_bold(func):
    def wrapper():
        return f"<b>{func()}</b>"
    return wrapper

def make_italic(func):
    def wrapper():
        return f"<i>{func()}</i>"
    return wrapper

@make_bold
@make_italic
def say():
    return "Hello"

print(say())

पायथन डेकोरेटर्स का उपयोग करके HTML टैग बनाना

फ़ंक्शन संशोधन और HTML टैगिंग के लिए पायथन स्क्रिप्ट

def add_html_tag(tag):
    def decorator(func):
        def wrapper():
            return f"<{tag}>{func()}</{tag}>"
        return wrapper
    return decorator

@add_html_tag("b")
@add_html_tag("i")
def say_hello():
    return "Hello"

print(say_hello())

उन्नत पायथन डेकोरेटर तकनीक

सरल फ़ंक्शन संशोधन से परे, पायथन डेकोरेटर कोड पुन: प्रयोज्यता और रखरखाव को बढ़ाने के लिए एक शक्तिशाली तरीका प्रदान करते हैं। एक उन्नत उपयोग का मामला पैरामीटरयुक्त डेकोरेटर है, जो डेकोरेटर को तर्क स्वीकार करने की अनुमति देता है। इस तकनीक को इसके साथ चित्रित किया गया था add_html_tag पिछले उदाहरणों में डेकोरेटर। एक डेकोरेटर को परिभाषित करके जो अन्य डेकोरेटर उत्पन्न करता है, हम अत्यधिक लचीली और पुन: प्रयोज्य कोड संरचनाएं बना सकते हैं। पैरामीटरयुक्त डेकोरेटर हमें डेकोरेटर को पैरामीटर पास करने में सक्षम बनाते हैं, जिससे कार्य व्यवहार में गतिशील और संदर्भ-विशिष्ट संशोधनों की अनुमति मिलती है।

डेकोरेटर्स का एक अन्य महत्वपूर्ण पहलू फ़ंक्शन मेटाडेटा को बनाए रखने की उनकी क्षमता है। जब किसी फ़ंक्शन को डेकोरेटर द्वारा लपेटा जाता है, तो उसका मेटाडेटा, जैसे उसका नाम और डॉकस्ट्रिंग, खो सकता है। इस मेटाडेटा को संरक्षित करने के लिए, Python's functools.wraps डेकोरेटर के भीतर प्रयोग किया जाता है। लगाने से @functools.wraps रैपर फ़ंक्शन में, मूल फ़ंक्शन के मेटाडेटा को कॉपी किया जाता है, यह सुनिश्चित करते हुए कि इस मेटाडेटा पर निर्भर उपकरण, जैसे दस्तावेज़ जनरेटर, सही ढंग से काम करना जारी रखते हैं। इसके अतिरिक्त, डेकोरेटर्स को स्टैक किया जा सकता है, जैसा कि दिखाया गया है @make_bold और @make_italic उदाहरण, व्यवहार संशोधन की कई परतों को स्वच्छ और पठनीय तरीके से लागू करने के लिए।

पायथन डेकोरेटर्स के बारे में सामान्य प्रश्न

  1. पायथन में डेकोरेटर क्या है?
  2. डेकोरेटर एक ऐसा फ़ंक्शन है जो किसी अन्य फ़ंक्शन के व्यवहार को संशोधित करता है, आमतौर पर पुन: प्रयोज्य तरीके से कार्यक्षमता जोड़ने के लिए उपयोग किया जाता है।
  3. आप किसी फ़ंक्शन में डेकोरेटर कैसे लागू करते हैं?
  4. आप का उपयोग करके एक डेकोरेटर लागू करते हैं @decorator_name फ़ंक्शन परिभाषा के ठीक ऊपर सिंटैक्स।
  5. क्या आप एक ही फ़ंक्शन में एकाधिक डेकोरेटर लागू कर सकते हैं?
  6. हां, एकाधिक डेकोरेटर को एक फ़ंक्शन के ऊपर रखा जा सकता है, प्रत्येक को सूचीबद्ध क्रम में लागू किया जा सकता है।
  7. पैरामीटरयुक्त डेकोरेटर क्या है?
  8. एक पैरामीटरयुक्त डेकोरेटर एक डेकोरेटर है जो तर्क लेता है, और अधिक गतिशील और लचीले संशोधनों की अनुमति देता है।
  9. डेकोरेटर का उपयोग करते समय आप किसी फ़ंक्शन का मेटाडेटा कैसे बनाए रखते हैं?
  10. आप उपयोग करते हैं @functools.wraps मूल फ़ंक्शन के मेटाडेटा को रैपर फ़ंक्शन में कॉपी करने के लिए डेकोरेटर के भीतर।
  11. डेकोरेटर क्यों उपयोगी हैं?
  12. डेकोरेटर कोड के पुन: उपयोग, पठनीयता और कार्यक्षमता को समाहित करके चिंताओं को अलग करने के लिए उपयोगी होते हैं।
  13. का उद्देश्य क्या है return wrapper एक डेकोरेटर में बयान?
  14. return wrapper स्टेटमेंट डेकोरेटर के संशोधनों को प्रभावी ढंग से लागू करते हुए, आंतरिक फ़ंक्शन लौटाता है।
  15. क्या डेकोरेटर्स का उपयोग क्लास विधियों पर किया जा सकता है?
  16. हाँ, डेकोरेटर्स का उपयोग उनके व्यवहार को संशोधित करने के लिए क्लास और इंस्टेंस दोनों तरीकों पर किया जा सकता है।
  17. आप पायथन में डेकोरेटर्स की श्रृंखला कैसे बनाते हैं?
  18. चेन डेकोरेटर्स के लिए, मल्टीपल स्टैक करें @decorator_name फ़ंक्शन परिभाषा के ऊपर कथन।
  19. डेकोरेटर्स में एफ-स्ट्रिंग्स का क्या उपयोग है?
  20. एफ-स्ट्रिंग्स का उपयोग डेकोरेटर्स में स्ट्रिंग्स को फ़ॉर्मेट करने के लिए किया जाता है, जिससे HTML टैग्स जैसे विशिष्ट प्रारूपों में फ़ंक्शन आउटपुट के गतिशील सम्मिलन की अनुमति मिलती है।

पायथन में फंक्शन डेकोरेटर्स का सारांश

पायथन में फ़ंक्शन डेकोरेटर फ़ंक्शन व्यवहार को संशोधित करने और बढ़ाने के लिए एक मजबूत तरीका प्रदान करते हैं। डेकोरेटर बनाने, लागू करने और चेन बनाने का तरीका समझकर, आप अपने कोड की मॉड्यूलरिटी और पठनीयता में उल्लेखनीय सुधार कर सकते हैं। इस गाइड में सरल और पैरामीटरयुक्त डेकोरेटर, फ़ंक्शन मेटाडेटा को संरक्षित करने जैसी आवश्यक अवधारणाओं को शामिल किया गया है functools.wraps, और फ़ंक्शन आउटपुट में HTML टैग जोड़ने के लिए डेकोरेटर्स के व्यावहारिक अनुप्रयोग। इन तकनीकों की महारत अधिक गतिशील और रखरखाव योग्य कोड को सक्षम बनाती है, जिससे स्वच्छ और अधिक कुशल प्रोग्रामिंग प्रथाओं की सुविधा मिलती है।