python - Get a dict of all variables currently in scope and their values -
इस स्निपेट पर विचार करें:
globalVar = 25 def myfunc (paramervar): localVar = 30 प्रिंट "वार्स: {globalVar}, {paramVar}, {localVar}!" प्रारूप (** VARS_IN_SCOPE) myfunc (123)
जहां VARS_IN_SCOPE
है इसके बाद मैं अन्य चीजों के बीच globalver
, paramvar
और localver
होता है।
मुझे पसंद है मूल रूप से उन सभी चर को संदर्भित करने में सक्षम हो सकते हैं जो वर्तमान में स्ट्रिंग के दायरे में हैं। इसलिए अपेक्षित आउटपुट होगा:
वार्स: 25, 123, 30
मैं इसे ** dict (globals ) .इटम () + स्थानीय ()। आइटम ())
से प्रारूप ()
। क्या यह हमेशा सही है या क्या कुछ कोने वाले मामलों में यह अभिव्यक्ति गलत तरीके से संभाल सकती है?
प्रश्न को स्पष्ट करने के लिए फिर से लिखा।
आप दो डिक्टिक्स मर्ज करने का सर्वोत्तम तरीका है (स्थानीय लोगों को ओवरराइड करते हुए) ग्लोबल्स और स्थानीय लोगों के विलय के दृष्टिकोण क्या गायब हैं (ए) बिल्डिन (मैं कल्पना करता हूं कि यह जानबूझकर है, अर्थात आप बिल्टिन को "वैरिएबल" के रूप में नहीं मानते हैं ... लेकिन, वे हो सकता है, यदि आप ऐसा चुनते हैं -), और (बी) यदि आप नेस्टेड फ़ंक्शन में हैं, तो कोई भी वेरिएबल जो कार्य करने के लिए स्थानीय हैं (सभी के साथ डिक्शनरी प्राप्त करने के लिए कोई अच्छी तरह नहीं उन , प्लस - केवल नेस्टेड फ़ंक्शंस में स्पष्ट रूप से उपयोग किए जाने वाले, अर्थात "फ्री वेरिएबल्स", किसी भी तरह से बंद होने वाले कक्षों के रूप में जीवित रहते हैं)। मैं इन मुद्दों की कल्पना करता हूं आपके इच्छित उपयोग के लिए कोई बड़ी बात नहीं है, लेकिन आपने "कोने के मामलों" का उल्लेख किया है ;-) यदि आपको उन्हें कवर करने की ज़रूरत है, तो इनके लिए इन्टैन्स (यह आसान है) और (इतनी आसान नहीं) सभी तरीकों (वेरिएबल्स जो आपको स्पष्ट रूप से नेस्टेड फ़ंक्शन - dict (ग्लोबल्स), ** स्थानीय ()) < / कोड>।
thefunction.func_code में उल्लिखित फ़ंक्शंस को जोड़ने से हैं) प्राप्त करने के तरीके हैं। .CO_freevars
पाने के लिए नाम, thefunction.func_closure
प्राप्त करने के लिए, इसका मूल्य प्राप्त करने के लिए प्रत्येक कक्ष पर cell_contents
)। (लेकिन, याद रखें, वे केवल आपके नेस्टेड फंक्शन के कोड में स्पष्ट रूप से अभिगमन के कार्यों को बंद करने से चर होंगे!)।
Comments
Post a Comment