1. ホーム
  2. python

[解決済み] Pythonで変数名を表示するにはどうしたらいいですか?[重複しています]。

2022-03-16 11:49:09

質問

という変数があるとします。 choice は2に等しい。この変数名にはどのようにアクセスするのだろうか?次のようなものです。

In [53]: namestr(choice)
Out[53]: 'choice'

辞書の作成に使用するためです。いい方法があるはずなのに、見逃しているだけだ。

EDIT

これを行う理由はこうです。私はあるデータ解析のものを実行しているのですが、実行時に微調整したい、あるいは微調整したくない複数のパラメータを指定してプログラムを呼び出しています。最後の実行で使用したパラメータを、次のような形式の.configファイルから読み込んでいます。

filename
no_sig_resonance.dat

mass_peak
700

choice
1,2,3

値のプロンプトが表示された場合、以前に使用されたものが表示され、空文字列の入力では、以前に使用された値が使用されます。

質問は、これらの値がスキャンされた辞書を書くことになったときです。パラメータが必要な場合、私は get_param で、ファイルにアクセスし、パラメータを見つけます。

を読み込むことで問題を一挙に回避しようと思います。 config ファイルを一度作成し、そこから辞書を作成します。元々それを避けていたのは...もう覚えていない理由です。私のコードを更新するには完璧な状況です

解決方法は?

どうしてもとおっしゃるなら、インスペクトベースの恐ろしい解決策をご紹介します。

import inspect, re

def varname(p):
  for line in inspect.getframeinfo(inspect.currentframe().f_back)[3]:
    m = re.search(r'\bvarname\s*\(\s*([A-Za-z_][A-Za-z0-9_]*)\s*\)', line)
    if m:
      return m.group(1)

if __name__ == '__main__':
  spam = 42
  print varname(spam)

自分の抱えている問題を見つめ直し、別のアプローチを模索するきっかけになればと思います。