यहाँ एक दृष्टिकोण है। मैं इसके लिए कुछ भी महत्वपूर्ण नहीं सुझाऊंगा, क्योंकि यह काफी भंगुर होगा। लेकिन यह किया जा सकता है।
एक फ़ंक्शन बनाएं inspectजो स्रोत कोड को खोजने के लिए मॉड्यूल का उपयोग करता है जो इसे कहते हैं। फिर आप उन चर नामों की पहचान करने के लिए स्रोत कोड को पार्स कर सकते हैं जिन्हें आप पुनः प्राप्त करना चाहते हैं। उदाहरण के लिए, यहां एक फ़ंक्शन कहा जाता है autodictजो चर की एक सूची लेता है और उनके मूल्यों के लिए एक शब्दकोश मानचित्रण चर नाम देता है। उदाहरण के लिए:
x = 'foo'
y = 'bar'
d = autodict(x, y)
print d
देना होगा:
{'x': 'foo', 'y': 'bar'}
स्रोत कोड का निरीक्षण करना स्वयं को खोजने के माध्यम से बेहतर है locals()या globals()क्योंकि उत्तरार्द्ध दृष्टिकोण आपको यह नहीं बताता है कि आप कौन से चर चाहते हैं।
किसी भी दर पर, यहाँ कोड है:
def autodict(*args):
get_rid_of = ['autodict(', ',', ')', '\n']
calling_code = inspect.getouterframes(inspect.currentframe())[1][4][0]
calling_code = calling_code[calling_code.index('autodict'):]
for garbage in get_rid_of:
calling_code = calling_code.replace(garbage, '')
var_names, var_values = calling_code.split(), args
dyn_dict = {var_name: var_value for var_name, var_value in
zip(var_names, var_values)}
return dyn_dict
कार्रवाई लाइन के साथ होती है inspect.getouterframes, जो उस कोड के भीतर स्ट्रिंग लौटाती है जिसे कहा जाता हैautodict ।
जादू के इस प्रकार के लिए स्पष्ट नकारात्मक पहलू यह है कि यह इस बारे में धारणा बनाता है कि स्रोत कोड कैसे संरचित है। और निश्चित रूप से, अगर यह दुभाषिया के अंदर चलाया जाता है तो यह बिल्कुल भी काम नहीं करेगा।
pip3 install python-varname==0.1.5; आयातित का उपयोग करfrom varname import nameof