कहो में बाहरी गुंजाइश को एक्सेस करना, मैं चर के साथ कुछ गुंजाइश है, और एक समारोह इस दायरे में कहा जाता है कुछ अपरिवर्तनीय चर बदलना चाहता है:अजगर 2.6
def outer(): s = 'qwerty' n = 123 modify() def modify(): s = 'abcd' n = 456
यह बाहरी गुंजाइश तक पहुँचने के लिए किसी भी तरह संभव है? Py3k से nonlocal
चर जैसे कुछ।
निश्चित रूप से मैं इस मामले में s,n = modify(s,n)
कर सकता हूं, लेकिन अगर मुझे कुछ सामान्य 'इंजेक्शन' की आवश्यकता होती है जो वहां निष्पादित होती है और मनमानी चरों को पुन: असाइन करने में सक्षम होनी चाहिए?
मेरे मन में प्रदर्शन है, इसलिए, यदि संभव हो, eval
& स्टैक फ्रेम निरीक्षण का स्वागत नहीं कर रहा है :)
युपीडी: यह असंभव है। अवधि। हालांकि, बाहरी विकल्प में चर का उपयोग करने के कुछ विकल्प हैं:
- ग्लोबल्स का उपयोग करें। वैसे,
func.__globals__
एक परिवर्तनशील शब्दकोश है;) - एक dict/वर्ग उदाहरण में स्टोर चर/किसी अन्य परिवर्तनशील कंटेनर
- चर दें के रूप में तर्क & उन्हें एक टपल के रूप में वापस मिल:
a,b,c = innerfunc(a,b,c)
- इंजेक्षन अन्य समारोह के बाईटकोड। यह
byteplay
पायथन मॉड्यूल के साथ संभव है।
यह नहीं है कि स्कॉइंग कैसे काम करता है। आप एक अलग स्टैकफ्रेम पर एक दायरे तक पहुंचने के लिए कहते हैं। यह ** बहुत ** भ्रमित होगा यदि स्कोपिंग आप जो भी कोशिश करते हैं, उसे अनुमति देगी, पूंछ रिकर्सन को लूप में फिर से लिखने के बारे में सोचें। तो कोड अनुकूलन अचानक एक कार्यक्रम के अर्थ को बदल देगा, यह कभी नहीं होगा। – Tino