访问变量的名称

时间:2011-12-17 20:13:04

标签: python variables

我正在尝试访问变量的名称。例如,如果我调用函数来打印列表(printL) 并希望打印我的列表名称"A_minus_B"

def printL (xlist):
    print "****************************"
    print "name of list"
    print (" entries :  "),len(xlist) 
    print xlist
    print  "****************************"
    return()

如何让函数打印"A_minus_B"而不是"name of list",这是我在调用函数printL(A_minus_B)时使用的名称?

2 个答案:

答案 0 :(得分:1)

你不能。 * 详细的原因在Python language reference中讨论,但基本上当你调用printL(A_minus_B)时Python所做的就是取值已被标记的值A_minus_B并创建一个新标签xlist,恰好引用相同的内容。从那时起,标签xlist与其他标签A_minus_B完全没有关联,事实上,标有A_minus_Bxlist或其他标签的值没有与用于标记它的任何名称的连接。


* 好吧,你可以,通过使用一些深入的“Python巫毒”......你基本上必须告诉Python阅读你所在的源代码片段调用printL(A_minus_B)并从那里提取变量名称。通常这是你可能不应该做的事情(不是因为你是初学者,而是因为它通常表明你以错误的方式设计了你的程序),但调试是可能适合的情况之一。这是一种方法:

import inspect, pprint

def print_values(*names):
    caller = inspect.stack()[1][0]
    for name in names:
        if name in caller.f_locals:
            value = caller.f_locals[name]
        elif name in caller.f_globals:
            value = caller.f_globals[name]
        else:
            print 'no such variable: ' + name
        # do whatever you want with name and value, for example:
        print "****************************"
        print name
        print (" entries :  "),len(value) 
        print value
        print  "****************************"

问题是当你调用这个函数时,你必须传递你想要打印的变量的名称,而不是变量本身。因此,您可以致电print_values('A_minus_B'),而不是print_values(A_minus_B)。您可以传递多个名称以将其全部打印出来,例如print_values('A_minus_B', 'C_minus_D', 'foo')

答案 1 :(得分:0)

替代方法:

list_dict = {}     #creates empty dictionary
list_dict['list_a'] = [1,2,3,4,5,6]   # here you create the name (key)
nice_name = 'list_b'
list_dict[nice_name] = [7,8,9,10,11,12]   # here you use already existing string as name (key)

def list_info(ld):
    for key in sorted(ld):
        print "****************************"
        print key
        print " entries :  " ,len(ld[key]) 
        print ld[key]
        print  "****************************"

list_info(list_dict)