在运行时获取Python变量名

在运行时获取Python变量名,python,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_Function

这与在运行时检索变量/对象名称不同

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
如何在代码中获得dictionary变量的名称?我不知道在循环中调用哪个变量来预先知道它的名称

  • 你不能。
    myFunctionMap
    列表包含对象,而不是上面两行附加的名称。顺便说一句,调用列表变量“map”不是一个好的做法,map通常是字典
  • 变量名不能以数字开头,因此
    2G\u函数
    3G\u函数
    不起作用
  • 您可以通过创建具有适当名称的词典来避免此问题
  • e、 g

  • 你不能。
    myFunctionMap
    列表包含对象,而不是上面两行附加的名称。顺便说一句,调用列表变量“map”不是一个好的做法,map通常是字典
  • 变量名不能以数字开头,因此
    2G\u函数
    3G\u函数
    不起作用
  • 您可以通过创建具有适当名称的词典来避免此问题
  • e、 g

    简言之,你不能

    在更长的时间里,如果您深入研究
    gc
    模块(对于一般情况)或使用
    locals()
    globals()
    …这是可能的,但最好简单地定义如下列表:

    myFunctionMap = [ ("someName", someName), … ]
    for name, map in myFunctionMap:
        print name
        …
    
    简言之,你不能

    在更长的时间里,如果您深入研究
    gc
    模块(对于一般情况)或使用
    locals()
    globals()
    …这是可能的,但最好简单地定义如下列表:

    myFunctionMap = [ ("someName", someName), … ]
    for name, map in myFunctionMap:
        print name
        …
    

    尽管对其他答案持悲观态度,但在这种特殊情况下,如果没有为
    G2_函数
    G3_函数
    标识的对象指定其他名称(我冒昧地修复了您的名称,这些名称不是给定的有效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
    

    我对您使用此信息所做的一切不承担任何责任。它几乎可以保证在你需要的时候失败。我不是开玩笑。

    尽管其他答案很悲观,但在这种情况下,如果没有其他名称分配给由
    G2\u函数
    G3\u函数
    (我冒昧地修正了你的名字,它们不是给定的有效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
    

    我对您使用此信息所做的一切不承担任何责任。它几乎可以保证在您需要时完全失败。我不是在开玩笑。

    尝试将您的列表作为字符串列表:

    d2G_Functions={'2G_1':"2G_f1",'2G_2':"2G_f2"}
    d3G_Functions={'3G_1':"3G_f1",'3G_2':"3G_f2"}
    myFunctions=["2G_Functions","3G_Functions"]
    
    for dict_name in myFunctions:
        print dict_name
        the_dict = eval("d"+dict_name)
        for j in the_dict:
            print str(j)
    

    (我更改了原始变量的名称,因为python标识符不能以数字开头)

    尝试将列表列表改为字符串列表:

    d2G_Functions={'2G_1':"2G_f1",'2G_2':"2G_f2"}
    d3G_Functions={'3G_1':"3G_f1",'3G_2':"3G_f2"}
    myFunctions=["2G_Functions","3G_Functions"]
    
    for dict_name in myFunctions:
        print dict_name
        the_dict = eval("d"+dict_name)
        for j in the_dict:
            print str(j)
    

    (我更改了原始变量的名称,因为python标识符不能以数字开头)

    代码中的变量不是有效的标识符。在Python的交互模式下运行第一行,您将立即得到语法错误。请在提交问题之前测试类似的内容,因为这会使人们更难帮助您。对此,我很抱歉。我打算使用伪代码而不是真实代码。看到这个了吗作为另一种解决方案。代码中的变量不是有效的标识符。在Python的交互模式下运行第一行,您将立即得到语法错误。请在提交问题之前测试类似的内容,因为这会使人们更难帮助您。对此,我很抱歉。我打算使用伪代码,而不是重新编写al代码。将此视为另一种解决方案。为什么这很可能失败且不推荐?您能给我一个场景吗?如果不更全面地了解您为什么尝试这样做,很难给出一个示例,但一般来说,如果将其他名称指定给对象
    alpha
    beta
    (即使通过使用
    伽马
    元素间接赋值)如果<代码> Alpha 或<代码> beta 被重新分配到别的东西。同样,这样的结果会导致难以读取的代码。Python是一种显式行为的显式代码编写语言。如果你想做魔术,考虑切换到Ruby或Perl。它们在这方面要好得多。@ Gooth-+ 1,你是对的,它是可能的。:)假设gc正在跟踪所有可能的变量名,这里有一个捕获所有变量名的单行程序:
    def varnames(val):print frozenset().union(*[set(k表示d中的(k,v)如果v是val)表示gc中的d.get_referers(y)(如果类型(d)=dict])
    为什么这很可能失败且不被推荐?你能给我一个场景吗?很难给出一个例子,不更全面地说明你为什么尝试这么做,但一般来说,如果给对象指定了其他名称
    alpha
    beta
    (即使通过使用
    伽马
    元素间接赋值)或者如果<代码> Alpha 或<代码> beta 被重新分配到别的东西。同样,这样的结果会导致难以读取的代码。Python是一种显式行为的显式代码编写语言。如果你想做魔术,考虑切换到Ruby或Perl。它们在这方面要好得多。