在运行时获取Python变量名
这和在运行时获取变量或对象的名字是不同的。
2G_Functions={'2G_1':2G_f1,'2G_2':2G_f2}
3G_Functions={'3G_1':3G_f1,'3G_2':3G_f2}
myFunctionMap=[2G_Functions,3G_Functions]
for i in myFunctionMap:
print i.??? "\n"
for j in i:
print str(j)
我希望输出的结果看起来像下面这样。
2G_Functions:
2G_1
2G_2
3G_Functions:
3G_1
3G_2
我该如何在代码中获取字典变量的名字呢?我不知道在循环中调用的是哪个,所以事先不知道它的名字。
4 个回答
0
简单来说,你是做不到的。
如果说得详细一点,虽然有点可能,但需要深入研究一下我认为是 gc
模块(一般情况下)或者使用 locals()
和 globals()
……不过,直接这样定义列表可能会更好:
myFunctionMap = [ ("someName", someName), … ]
for name, map in myFunctionMap:
print name
…
3
尽管其他回答的语气比较悲观,但在这个特定情况下,如果没有其他名字被分配给 G2_Functions
和 G3_Functions
这两个对象,你其实是可以做到你想要的(我顺便修正了你的名字,因为原来的名字在Python中是不合法的)。不过,我必须说,这真的是个糟糕、糟糕、糟糕 的主意,你不应该这么做,因为最终它会出问题,到时候你会很失望。所以,千万不要这么做。绝对不要。
下面的内容类似于你想要做的事情:
alpha = {'a': 1, 'b': 2}
beta = {'c': 2, 'd': 4}
gamma = [alpha, beta]
listOfDefinedLocals = list(locals().iteritems())
for x, y in listOfDefinedLocals:
if y is gamma[0]: print "gamma[0] was originally named " + x
if y is gamma[1]: print "gamma[1] was originally named " + x
这段代码的输出结果是:
gamma[1] was originally named beta
gamma[0] was originally named alpha
我对你如何使用这些信息不负任何责任。几乎可以保证它会在你最需要的时候失败。我不是在开玩笑。
0
- 你不能这样做。
myFunctionMap
这个列表里存的是对象,而不是上面两行提到的名字。顺便说一下,把一个列表变量叫做“map”并不是个好习惯,因为“map”通常指的是字典。 - 变量名不能以数字开头,所以
2G_Functions
和3G_Functions
这样的名字是不能用的。 - 你可以通过创建一个字典,并给它起合适的名字来绕过这个问题。
例如:
myFunctionMap = {
"2G_Functions" : { ... },
"3G_Functions" : { ... },
}
for (name, functions) in myFunctionMap.iteritems():
print name
for func in functions.keys():
print func