假设我有一个名为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
提交一次并从中生成字典.我原本避免了这个......我不再记得的原因.更新我的代码的完美情况!
如果你坚持,这里有一些可怕的基于检查的解决方案.
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)
我希望它会激励你重新评估你的问题并寻找另一种方法.
def namestr(obj, namespace): return [name for name in namespace if namespace[name] is obj]
例:
>>> a = 'some var' >>> namestr(a, globals()) ['a']
正如@rbright已经指出你所做的一切,可能有更好的方法.
你不能,因为Python中没有变量而只有名称.
例如:
> a = [1,2,3] > b = a > a is b True
这两个中的哪一个现在是正确的变量?a
和之间没有区别b
.
之前有一个类似的问题.
如果你想这样做,那就意味着你做错了什么.考虑使用dict
替代.
def show_val(vals, name): print "Name:", name, "val:", vals[name] vals = {'a': 1, 'b': 2} show_val(vals, 'b')
输出:
Name: b val: 2
我建议您描述您遇到的问题,而不是向特定解决方案询问详细信息; 我想你会得到更好的答案.我这样说是因为几乎可以肯定有更好的方法去做你想做的事情.通常不需要以这种方式访问变量名来解决任何语言的问题.
也就是说,所有变量名都已经在字典中,可以通过内置函数locals和globals访问.使用正确的一个作为您正在检查的范围.
检查这些词典的少数常用习惯之一是简单的字符串插值:
>>> first = 'John' >>> last = 'Doe' >>> print '%(first)s %(last)s' % globals() John Doe
即使需要按名称检查变量,这种事情往往比替代品更具可读性.