पायथन डेकोरेटर ट्यूटोरियल: पायथन में सज्जाकारों का उपयोग कैसे करें



यह लेख अजगर में डेकोरेटर की अवधारणा को विस्तृत ट्यूटोरियल के साथ कवर करता है जिसमें विभिन्न वास्तविक जीवन उदाहरण हैं जैसे कि फैंसी डेकोरेटर, आदि।

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

पायथन में कार्य क्या हैं?

पायथन में सज्जाकार एक उन्नत विषय है। तो यह सुनिश्चित करने से पहले कि आप अजगर कार्यों की अवधारणा के साथ पूरी तरह से स्पष्ट हैं। कुछ पूर्वापेक्षाएँ हैं जिन्हें अजगर में सज्जाकारों के लिए आगे बढ़ने से पहले समझना चाहिए।





प्रथम श्रेणी की वस्तुएँ

अजगर में, सब कुछ एक वस्तु के रूप में माना जाता है जिसमें सभी शामिल हैं जानकारी का प्रकार , कार्य करता है भी। इसलिए, एक फ़ंक्शन को प्रथम श्रेणी के ऑब्जेक्ट के रूप में भी जाना जाता है और इसे तर्कों के रूप में पास किया जा सकता है।

आइए एक उदाहरण देखें कि यह कैसे काम करता है।

रेल ट्यूटोरियल पर रूबी
def func1 (नाम): वापसी f'Hello {name} 'def func2 (नाम): वापसी f' {name}, आप कैसे करते हैं? ' def fun3 (func4): वापसी func4 ('प्रिय शिक्षार्थी') प्रिंट (func3 (func1)) प्रिंट (func3 (func2))
 आउटपुट: नमस्ते प्रिय शिक्षार्थी, प्रिय शिक्षार्थी, आप कैसे हैं?

उपरोक्त उदाहरण में, हमने उपयोग किया है नाम पाने के लिए और func1 और func2 को func3 में एक तर्क के रूप में पारित किया।



आंतरिक कार्य

अजगर में, एक फ़ंक्शन के अंदर कार्यों को परिभाषित करना संभव है। उस फ़ंक्शन को एक आंतरिक फ़ंक्शन कहा जाता है। यह दिखाने के लिए एक उदाहरण है कि हम अजगर में आंतरिक कार्यों का उपयोग कैसे कर सकते हैं।

डिफ फंक (): प्रिंट ('फर्स्ट फंक्शन') डिफ फंक 1 (): प्रिंट ('फर्स्ट चाइल्ड फंक्शन') डिफ फंक 2 (): प्रिंट ('दूसरा चाइल्ड फंक्शन') फंक 1 () फंक 2 () फंक ()
 आउटपुट: पहला फंक्शन पहला चाइल्ड फंक्शन दूसरा चाइल्ड फंक्शन

उपरोक्त कार्यक्रम में, इससे कोई फर्क नहीं पड़ता कि बच्चे के कार्य कैसे घोषित किए जाते हैं। आउटपुट इस बात पर निर्भर करता है कि बच्चे के कार्यों को कैसे निष्पादित किया जाता है। वे स्थानीय रूप से फ़ंक () के साथ स्कूप किए जाते हैं, इसलिए उन्हें अलग से नहीं बुलाया जा सकता है।

यदि आप उन्हें अलग से बुलाते हैं तो आपको एक त्रुटि मिलेगी क्योंकि वे इस प्रकार संग्रहीत हैं चर फंक () के अंदर और केवल तभी कहा जा सकता है जब फंक () कहा जाता है।

एक समारोह से एक समारोह में लौटना

किसी अन्य फ़ंक्शन का उपयोग करके फ़ंक्शन को वापस करना संभव है। इसे समझने के लिए नीचे दिए गए उदाहरण पर एक नज़र डालें।

def func1 (): def func1 (): वापसी 'edureka' def func2 (): वापसी 'python' यदि n == 1: func1 और लौटें: func2 a = func (1) b = func (2) प्रिंट लौटाएं ( a ()) प्रिंट (b)
 आउटपुट: edureka python

पायथन में सज्जाकार

अजगर में सज्जाकार बहुत शक्तिशाली होते हैं जो किसी फ़ंक्शन के व्यवहार को स्थायी रूप से संशोधित किए बिना संशोधित करते हैं। यह मूल रूप से दूसरे फ़ंक्शन को लपेटता है और चूंकि दोनों फ़ंक्शन कॉल करने योग्य हैं, इसलिए यह कॉल करने योग्य रिटर्न देता है।

हेंडसाइट में, एक डेकोरेटर एक फ़ंक्शन लपेटता है और उसके व्यवहार को संशोधित करता है। आइए हम एक सरल उदाहरण पर ध्यान दें कि हम अजगर में सज्जाकारों के साथ कैसे काम कर सकते हैं।

def function1 (function): def आवरण (): print ('hello') function () प्रिंट ('python edureka' में आपका स्वागत है) वापसी आवरण def function2 (): प्रिंट ('Pythonista') function_ function1 (function2) function2 ( )
 आउटपुट: हेलो पाइथोनिस्टा का स्वागत पायथन एडुरेका से है

प्रोग्रामर्स के लिए चीजों को थोड़ा आसान बनाने के लिए, हमारे पास अजगर डेकोरेटर्स के साथ एक सिंटैक्टिक शुगर है। यह कैसे काम करता है यह समझने के लिए नीचे दिए गए उदाहरण पर एक नज़र डालें।

def function1 (समारोह): def आवरण (): print ('hello') function () प्रिंट ('आप कैसे हैं?') return आवरण @ function1 def function2 (): प्रिंट ('पायथनोस्टा') function2 ()
 आउटपुट: हैलो pythonista आप कैसे हैं?

आउटपुट उपरोक्त प्रोग्राम के समान होगा, एकमात्र अंतर यह है कि हमने @ सिंबल के साथ पाई सिंटैक्स का उपयोग किया है।

सजावट के साथ तर्क का उपयोग करना

जब आपके पास तर्कों के साथ एक फ़ंक्शन होता है, तो यह डेकोरेटर फ़ंक्शन के लिए मुश्किल हो जाता है क्योंकि इसे घोषणा में भी तर्क की आवश्यकता होती है। इससे निपटने के लिए हम आंतरिक आवरण समारोह में * आर्ग्स और ** क्वार्ग्स का उपयोग कर सकते हैं। इसे समझने के लिए निम्नलिखित उदाहरण देखें।

def function1 (समारोह): def आवरण (* args, ** kwargs): प्रिंट ('hello') फ़ंक्शन (* args, ** kwargs) प्रिंट ('आपका स्वागत है edureka') वापसी आवरण @ function1 def2 (नाम): प्रिंट (f '{name}') function2 ('पाइथोनिस्टा')
 आउटपुट: हैलो pythonista edureka में आपका स्वागत है

सजाए गए कार्यों से मूल्यों की वापसी

आइए एक उदाहरण पर एक नज़र डालते हैं कि हम एक सजाया समारोह से एक मूल्य कैसे वापस कर सकते हैं।

def function1 (फ़ंक्शन): def आवरण (* args, ** kwargs): फ़ंक्शन (* args, ** kwargs) प्रिंट ('यह काम किया') वापसी आवरण @ function1 def function2 (नाम): प्रिंट (f 'name') ') फ़ंक्शन 2 (' अजगर ')
 आउटपुट: अजगर ने काम किया

किसी भी त्रुटि से बचने के लिए तर्कों के साथ अपने रैपर फ़ंक्शन को वापस करना सुनिश्चित करें।

पायथन में फैंसी डेकोरेटर

अब जब हम जानते हैं कि डेकोरेटर अजगर में कैसे काम करते हैं, तो आइए हम कुछ उदाहरणों की मदद से एक जटिल सुविधाओं का पता लगाएं।

क्लास डेकोरेटर्स

अजगर में एक वर्ग को सजाने के दो तरीके हैं। पहला वह स्थान है जहाँ आप किसी कक्षा के अंदर विधियों को सजा सकते हैं, अजगर में @classmethod, @staticmethod और @property जैसे अंतर्निहित सज्जाकार हैं। @classmethod और @staticmethod एक वर्ग के अंदर उन तरीकों को परिभाषित करते हैं जो किसी वर्ग के किसी अन्य उदाहरण से जुड़ा नहीं है। @property का उपयोग आम तौर पर क्लास विशेषता के गेटर्स और सेटर्स को अनुकूलित करने के लिए किया जाता है। इसे समझने के लिए एक उदाहरण पर एक नज़र डालते हैं।

वर्ग वर्ग: def __init __ (स्व, पक्ष): self._side = side @property def side (स्व): return self._side @ side.setter def side (स्व, मान): यदि मान & gt = 0: self._side = मूल्य अन्य: प्रिंट ('त्रुटि') @property डीईएफ़ क्षेत्र (स्व): स्व वापस लौटें ।_side ** 2 @classmethod def Unit_square (cls): रिटर्न क्ल्स (1) s = स्क्वायर (5) प्रिंट (s.side) प्रिंट (s.area)
 आउटपुट: ५ २५

पूरी कक्षा को सजाने का एक और तरीका है। इसे समझने के लिए एक उदाहरण लेते हैं।

डाटाकल्सेस से डाटाकलास @ डॅटाकाॅलस वर्ग कार्ड: रैंक: स्ट्रट सूट: स्ट्र

एक कक्षा को सजाने से इसके तरीकों पर प्रतिबिंबित नहीं होता है। यह एक फ़ंक्शन के डेकोरेटर को लिखने के लगभग समान है, केवल अंतर एक फ़ंक्शन के बजाय तर्क में वर्ग है।

सिंगलटन क्लास

एक एकल वर्ग में केवल एक उदाहरण होता है। अजगर में ट्रू, नो, आदि सहित बहुत सारे सिंगल हैं। आइए हम इसे बेहतर समझने के लिए एक उदाहरण देखें।

इम्पोर्ट फंक्शनलबल्स डी सिंगलटन (cls): @ फंक्शनलs.wraps (cls) डीप रैपर (* args, ** kwargs): यदि नहीं, तो wrapper.instance: wrapper.instance = cls (* args, ** kwargs) रिटर्न wrapper.instance रैपर .instance = कोई भी नहीं लौटने वाला रैपर @ एकलिंग क्लास एक: पास पहला = एक () दूसरा = एक () प्रिंट (पहला दूसरा है)
 आउटपुट: सच

Using का उपयोग करना 'केवल उन वस्तुओं के लिए सही है जो समान उदाहरण हैं। उपरोक्त उदाहरण किसी अन्य फ़ंक्शन डेकोरेटर के समान दृष्टिकोण का उपयोग करता है। एकमात्र अंतर यह है कि हमने फ़ंक्शन के बजाय cls का उपयोग किया है। इसके अलावा, पहला और दूसरा सटीक एक ही उदाहरण हैं।

नेस्टिंग डेकोरेटर्स

आप कई सज्जाकारों को एक दूसरे के ऊपर स्टैक करके उपयोग कर सकते हैं। आइए हम एक उदाहरण लें कि यह कैसे काम करता है।

@ function1 @ function2 def फ़ंक्शन (नाम): प्रिंट (f '{name}')

यह है कि हम नेस्टेड डेकोरेटर्स को एक दूसरे पर स्टैक करके उपयोग कर सकते हैं। उपरोक्त उदाहरण में, यह केवल एक मात्र चित्रण है, इसे काम करने के लिए आपको फ़ंक्शन 1 और फ़ंक्शन 2 को उनमें से प्रत्येक के अंदर आवरण कार्यों के साथ परिभाषित करना होगा।

सजावट में तर्क

एक डेकोरेटर में तर्कों को पारित करना हमेशा उपयोगी होता है। आइए हम निम्नलिखित उदाहरण पर विचार करें।

आयात फेनोल्यूल्स डीट रिपीट (संख्या): डिफ डेकोरेटर_रेपिएट (फंक): @ फेनमूलसेव्रेप्स (फंक) डिफ रैपर (* आर्ग्स, ** क्वार्ग्स): _ फॉर रेंज (संख्या) में: वैल्यू (फंक), * क्वार्स ) रिटर्न वैल्यू रिटर्न रैपर रिटर्न डेकोरेटर_repeat @repeat (संख्या = 4) डीफ़ेक्शन (नाम): प्रिंट (f '{name}') फंक्शन ('पायथन')
 आउटपुट: अजगर अजगर अजगर अजगर

यह हमें इस लेख के अंत में लाता है जहां हमने सीखा है कि हम उदाहरण के साथ पायथन में डेकोरेटर का उपयोग कैसे कर सकते हैं। मुझे उम्मीद है कि आप इस पायथन डेकोरेटर ट्यूटोरियल में आपके साथ साझा किए गए सभी के साथ स्पष्ट हैं

यदि आप 'पायथन डेकोरेटर ट्यूटोरियल' पर इस लेख को प्रासंगिक पाते हैं, तो देखें दुनिया भर में फैले 250,000 से अधिक संतुष्ट शिक्षार्थियों के नेटवर्क के साथ एक विश्वसनीय ऑनलाइन शिक्षण कंपनी।

हम यहां आपकी यात्रा में हर कदम पर आपकी मदद करने के लिए हैं और ऐसे पाठ्यक्रम के साथ आते हैं जो छात्रों और पेशेवरों के लिए बनाया गया है जो बनना चाहते हैं । पाठ्यक्रम आपको पायथन प्रोग्रामिंग में एक शुरुआत देने के लिए डिज़ाइन किया गया है और आपको विभिन्न के साथ-साथ कोर और उन्नत पायथन अवधारणाओं के लिए प्रशिक्षित करता है। पसंद

यदि आप किसी भी प्रश्न के उत्तर में आते हैं, तो 'पायथन डेकोरेटर ट्यूटोरियल' के टिप्पणी अनुभाग में अपने सभी प्रश्न पूछने के लिए स्वतंत्र महसूस करें और हमारी टीम जवाब देने में प्रसन्न होगी।