এখানে একটি পদ্ধতির। আমি এটি কোনও গুরুত্বপূর্ণ বিষয়গুলির জন্য সুপারিশ করব না, কারণ এটি বেশ ভঙ্গুর হবে। তবে তা করা যায়।
এমন একটি ফাংশন তৈরি করুন যা 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