原始文本作为Python中字符串的参数

时间:2016-03-20 15:01:26

标签: python string function

我有一个功能:

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]

问题是,正如你所看到的,我必须使用一个字符串作为参数,是否有任何方法可以输入原始文本然后将其转换为函数内的字符串,这样我就不必使用引号?

1 个答案:

答案 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,因为您基本上是手动重新创建调试器。