पायथन डेकोरेटर शक्तिशाली उपकरण हैं जो हमें कार्यों या विधियों के व्यवहार को संशोधित करने या बढ़ाने की अनुमति देते हैं। सामान्य उपयोग के मामलों में लॉगिंग, प्राधिकरण और बहुत कुछ शामिल हैं।
हालाँकि, जब डेकोरेटर को परिभाषित करने के लिए कहा गया, तो कई लोग कह सकते हैं,
यह एक फ़ंक्शन के लिए एक रैपर है।
हालाँकि यह तकनीकी रूप से सही है, परदे के नीचे और भी बहुत कुछ हो रहा है।
एक साधारण डेकोरेटर का विच्छेदन
आइए एक सीधा उदाहरण देखें:
def my_decorator(func): def wrapper(*args, **kwargs): print("Before calling the function") result = func(*args, **kwargs) print("After calling the function") return result return wrapper @my_decorator def say_hello(name): print(f"Hello, {name}!")
यहाँ, my_decorator फ़ंक्शनsay_hello के लिए एक डेकोरेटर है। जबsay_hello परिभाषित किया जाता है, तो यह स्वचालित रूप से my_decorator को पास कर दिया जाता है, जिससे फ़ंक्शन कॉल इसमें परिवर्तित हो जाती है:
say_hello = my_decorator(say_hello)
यह परिवर्तन कब होता है?
यह परिवर्तन कोड के संकलन के दौरान होता है, विशेष रूप से फ़ंक्शन परिभाषा समय पर - निष्पादन समय पर नहीं।
कोड को अलग करना
यह समझने के लिए कि डेकोरेटर निचले स्तर पर कैसे काम करते हैं, हम डेकोरेटेड फ़ंक्शन के बाइटकोड की जांच करने के लिए डिस मॉड्यूल का उपयोग कर सकते हैं:
import dis @my_decorator def say_hello(name): print(f"Hello, {name}!") dis.dis(say_hello)
बाइटकोड ब्रेकडाउन
dis.dis(say_hello) का आउटपुट इस तरह दिख सकता है:
बाइटकोड की व्याख्या
फ़ंक्शन को कॉल करने से पहले
मूल फ़ंक्शन को कॉल करना
फंक्शन को कॉल करने के बाद
निष्कर्ष
पायथन डेकोरेटर केवल फ़ंक्शन रैपर से कहीं अधिक हैं; वे हमें परिभाषा समय पर फ़ंक्शन व्यवहार को संशोधित करने में सक्षम बनाते हैं। यह समझकर कि वे कैसे काम करते हैं और बाइटकोड की जांच करके, हम अपनी परियोजनाओं में डेकोरेटर्स का अधिक प्रभावी ढंग से उपयोग कर सकते हैं।
अभी के लिए बस इतना ही! यदि कोई और चीज़ है जिसमें आप मुझे शामिल करना चाहेंगे, तो बस मुझे बताएं!
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3