我有一个功能:
def list_printer(name):
frame = sys._getframe(1)
print(name, '=', repr(eval(name, frame.f_globals, frame.f_locals)))
return
和一个清单:
my_list = [1, 2, 3, 4, 5]
调用它时看起来像这样:
list_printer('my_list')
和输出:
my_list = [1, 2, 3, 4, 5]
问题是,正如你所看到的,我必须使用一个字符串作为参数,是否有任何方法可以输入原始文本然后将其转换为函数内的字符串,这样我就不必使用引号?
答案 0 :(得分:0)
首先,“原始文本”不是一个术语。我相信你问你是否可以直接将变量传递给打印变量名称和值的函数。
这是不可能的,因为变量名称与它们代表的值没有直接联系 - 它们是pointers or references。这意味着当您致电f(my_list)
时,值 my_list
引用会传递给f()
,但不会传递给名称“my_list”。
如果您的目的是打印变量名及其值,则需要进行某种反射(您的list_printer
方法正在进行),以便检查程序的当前状态并识别变量名为"my_list"
。
当然,因为你必须将变量名称指定为字符串,所以你也可以定义一个将文本标签与变量相关联的简单函数,如下所示:
def print_value(name, value):
print('%s = %s' % (name, value))
您可以这样打电话:
print_value('my_list', my_list)
但您也可以在name
字段中添加更多上下文,例如:
print_value('my_list, defined in my_module', my_list)
进一步帮助调试。您可能还想查看Python调试器pdb
,因为您基本上是手动重新创建调试器。