"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > पायथन डेकोरेटर्स को समझना: एक गहन जानकारी

पायथन डेकोरेटर्स को समझना: एक गहन जानकारी

2024-11-08 को प्रकाशित
ब्राउज़ करें:244

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

यह एक फ़ंक्शन के लिए एक रैपर है।

हालाँकि यह तकनीकी रूप से सही है, परदे के नीचे और भी बहुत कुछ हो रहा है।

एक साधारण डेकोरेटर का विच्छेदन
आइए एक सीधा उदाहरण देखें:

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) का आउटपुट इस तरह दिख सकता है:

Understanding Python Decorators: A Deep Dive
बाइटकोड की व्याख्या

  1. फ़ंक्शन को कॉल करने से पहले

    • LOAD_GLOBAL: प्रिंट फ़ंक्शन लोड करता है।
    • LOAD_CONST: 'फ़ंक्शन को कॉल करने से पहले' संदेश लोड करता है।
    • CALL_FUNCTION: कॉल प्रिंट।
    • POP_TOP: रिटर्न मान को खारिज कर देता है।
  2. मूल फ़ंक्शन को कॉल करना

    • LOAD_DEREF: क्लोजर द्वारा कैप्चर किए गए मूल फ़ंक्शन (func) को लोड करता है।
    • LOAD_FAST: स्थितीय और कीवर्ड तर्क लोड करता है।
    • BUILD_MAP: कीवर्ड तर्कों के लिए एक नया शब्दकोश बनाता है।
    • CALL_FUNCTION_EX: तर्कों के साथ मूल फ़ंक्शन को कॉल करता है।
    • STORE_FAST: परिणाम को स्थानीय चर में संग्रहीत करता है।
  3. फंक्शन को कॉल करने के बाद

    • पहले भाग के समान, यह 'फ़ंक्शन को कॉल करने के बाद' प्रिंट टू आउटपुट को कॉल करता है।
    • परिणाम लौटा रहा है
    • परिणाम चर लोड करता है और उसे लौटाता है।

निष्कर्ष
पायथन डेकोरेटर केवल फ़ंक्शन रैपर से कहीं अधिक हैं; वे हमें परिभाषा समय पर फ़ंक्शन व्यवहार को संशोधित करने में सक्षम बनाते हैं। यह समझकर कि वे कैसे काम करते हैं और बाइटकोड की जांच करके, हम अपनी परियोजनाओं में डेकोरेटर्स का अधिक प्रभावी ढंग से उपयोग कर सकते हैं।

अभी के लिए बस इतना ही! यदि कोई और चीज़ है जिसमें आप मुझे शामिल करना चाहेंगे, तो बस मुझे बताएं!

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/aman-गिरि/अंडरस्टैंडिंग-पाइथॉन-डेकोरेटर्स-ए-डीप-डाइव-पीपी0?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.com से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3