] क्या यह किसी फ़ंक्शन के भीतर स्थानीय चर को अपडेट कर सकता है? दुविधा
पायथन 3 में, निम्न कोड स्निपेट एक स्थानीय चर को अद्यतन करने में विफल रहता है जैसा कि कोई अपेक्षा कर सकता है: def f (): ए = 1 निष्पादित ("ए = 3") प्रिंट (a)
प्रत्याशित '3' के बजाय, यह खतरनाक रूप से '1' प्रिंट करता है! पायथन 2 में एक ही कोड वास्तव में स्थानीय चर को अपडेट करेगा, '3' छापता है। यह असमानता एक मौलिक परिवर्तन से उत्पन्न होती है कि कैसे पायथन स्थानीय चर को संभालता है। संकलन समय पर। यह दक्षता स्थानीय लोगों को रनटाइम संशोधनों को प्रतिबंधित करने की कीमत पर आती है। इस प्रकार, पायथन 3 में डिफ़ॉल्ट निष्पादन कॉल स्थानीय चर को सफलतापूर्वक बदल नहीं सकता है। स्पष्ट रूप से एक स्थानीय लोगों को निष्पादित करने के लिए शब्दकोश पास करें। यह शब्दकोश गतिशील कोड के निष्पादन के बाद अद्यतन स्थानीय चर को संग्रहीत करेगा। संशोधित कोड इस तरह दिखता है:
def foo (): ldict = {} Exec ("A = 3", Globals (), ldict) a = ldict ['a'] प्रिंट (a)
के लिए निहितार्थ ()
def f(): a = 1 exec("a = 3") print(a)
अप्रत्याशित व्यवहार। सुरक्षा के लिए, स्थानीय चर को अपडेट करने का इरादा रखते हुए निष्पादित करने के लिए किसी को हमेशा एक स्पष्ट स्थानीय शब्दकोश पास करना चाहिए।
बग रिपोर्ट में कहा गया है कि स्थानीय चर के लिए पायथन 3 के अनुकूलन ने वर्तमान व्यवहार का नेतृत्व किया। संकलक, पायथन के स्वयं से कस्टम निष्पादन कार्यों को अलग करने में असमर्थ, उन्हें विशेष उपचार प्रदान नहीं कर सकता है। इसलिए, डिफ़ॉल्ट निष्पादन स्थानीय लोगों को नहीं बदल सकता है। इसने स्थानीय चर को अंतर्निहित निष्पादन के संकलक के विशेष हैंडलिंग के आधार पर गतिशील रूप से संशोधित करने की अनुमति दी। स्थानीय चर को संशोधित करने के लिए दृष्टिकोण में परिवर्तन। एक स्पष्ट स्थानीय लोगों के शब्दकोश को नियोजित करके, डेवलपर्स अपने स्थानीय चर पर नियंत्रण बनाए रखते हुए गतिशील कोड निष्पादन की शक्ति का लाभ उठा सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3