これが1つのアプローチです。これは非常に壊れやすいので、重要なものにはお勧めしません。しかし、それは可能です。
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