我正在尝试访问变量的名称。例如,如果我调用函数来打印列表(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)
时使用的名称?
答案 0 :(得分:1)
你不能。 * 详细的原因在Python language reference中讨论,但基本上当你调用printL(A_minus_B)
时Python所做的就是取值已被标记的值A_minus_B
并创建一个新标签xlist
,恰好引用相同的内容。从那时起,标签xlist
与其他标签A_minus_B
完全没有关联,事实上,标有A_minus_B
或xlist
或其他标签的值没有与用于标记它的任何名称的连接。
* 好吧,你可以,通过使用一些深入的“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)