在运行时在python中检索一个variables的名字?

有没有办法知道,在运行时,variables的名称(从代码)? 或在编译过程中忘记var名字(字节码或不)?

例如

 >>> vari = 15
 >>> print vari。~~ name ~~()
 'VARI'

注意:我在谈论普通的数据typesvariables(int,str,list …)

这里有一个基本的(也许是奇怪的)函数,它显示了它的参数名…这个想法是分析代码并search对函数的调用(在init方法中添加它可以帮助查找实例名称,尽pipe使用更复杂的代码分析)

 def display(var): import inspect, re callingframe = inspect.currentframe().f_back cntext = "".join(inspect.getframeinfo(callingframe, 5)[3]) #gets 5 lines m = re.search("display\s+\(\s+(\w+)\s+\)", cntext, re.MULTILINE) print m.group(1), type(var), var 

请注意:从调用代码中获取多行有助于在下面的例子中调用被分割的情况:

 display( my_var ) 

但会产生意想不到的结果:

 display(first_var) display(second_var) 

如果你不能控制你的项目的格式,你仍然可以改进代码来检测和pipe理不同的情况。

总的来说,我猜静态代码分析可以产生更可靠的结果,但我懒得现在检查它

variables名不会被遗忘,你可以通过自省来访问variables(并查看你拥有的variables),例如

 >>> i = 1 >>> locals()["i"] 1 

但是,由于Python中没有指针,因此如果不实际编写名称,就无法引用variables。 所以如果你想打印一个variables名和它的值,你可以通过locals()或类似的函数。 ( [i]变成[1]并且没有办法检索1实际上来自i

variables名保存在编译后的代码中(例如dir内置函数可以工作),但是映射是从名称到值,而不是相反。 所以,如果有几个variables都是值得的,比如23 ,那么只有23的值才能告诉它们。

这里是我用来打印variables值的函数,它适用于本地以及全局variables:

 import sys def print_var(var_name): calling_frame = sys._getframe().f_back var_val = calling_frame.f_locals.get(var_name, calling_frame.f_globals.get(var_name, None)) print (var_name+':', str(var_val)) 

所以下面的代码:

 global_var = 123 def some_func(): local_var = 456 print_var("global_var") print_var("local_var") print_var("some_func") some_func() 

生产:

 global_var: 123 local_var: 456 some_func: <function some_func at 0x10065b488> 

这将适用于简单的数据types(str,int,float,list等)

 def my_print(var_str) : print var_str+':', globals()[var_str] 

你可以做到这一点,只是不漂亮。

 import inspect, sys def addVarToDict(d, variable): lineNumber = inspect.currentframe().f_back.f_lineno with open(sys.argv[0]) as f: lines = f.read().split("\n") line = lines[lineNumber-1] varName = line.split("addVarToDict")[1].split("(")[1].split(",")[1].split(")")[0].strip() d[varName] = variable d = {} a=1 print d # {} addVarToDict(d,a) print d # {'a': 1} 

我尝试从上面的post以下链接没有成功:谷歌search返回这一个。

http://pythonic.pocoo.org/2009/5/30/finding-objects-names

就在昨天,我看到一个工作代码的博客文章,只是这样做。 这是链接:

http://pyside.blogspot.com/2009/05/finding-objects-names.html