如何在python中打印变量名?

2024-03-29 08:15:30 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个名为choice的变量,它等于2。如何访问变量的名称?相当于

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

用来编字典。有个很好的方法,我只是错过了。

编辑:

这样做的原因是这样的。我正在运行一些数据分析的东西,我调用程序与多个参数,我想调整,或不调整,在运行时。我从格式为的.config文件中读取了上次运行时使用的参数

filename
no_sig_resonance.dat

mass_peak
700

choice
1,2,3

当提示输入值时,将显示先前使用的值,空字符串输入将使用先前使用的值。

我的问题是,当涉及到编写这些值已被扫描到的字典时。如果需要参数,我运行get_param,它访问文件并找到参数。

我想我将通过阅读一次.config文件并从中生成一个字典来避免所有问题。我本来是为了。。。我不再记得的原因。完美的情况下更新我的代码!


Tags: 文件方法in程序名称config编辑参数
3条回答

回答你原来的问题:

def namestr(obj, namespace):
    return [name for name in namespace if namespace[name] is obj]

示例:

>>> a = 'some var'
>>> namestr(a, globals())
['a']

作为@rbright already pointed out无论你做什么,可能都有更好的方法。

不能,因为Python中没有变量,只有名称。

例如:

> a = [1,2,3]
> b = a
> a is b
True

这两个变量中的哪一个现在是正确的变量?ab之间没有区别。

以前有过similar question

如果你坚持,这里有一些可怕的基于检查的解决方案。

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)

我希望它能激励你重新评估你的问题,并寻找另一种方法。

相关问题 更多 >