Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中作为字符串参数的原始文本_Python_String_Function - Fatal编程技术网

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

Python中作为字符串参数的原始文本,python,string,function,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]

我有一个功能:

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]
问题是,正如您所看到的,我必须使用字符串作为参数,是否有任何方法可以输入原始文本,然后在函数中将其转换为字符串,这样我就不必使用引号?

首先,“原始文本”不是一个术语。我相信您是在问是否可以将变量直接传递给打印变量名称和值的函数

这是不可能的,因为变量名与它们所表示的值没有直接联系——它们是相互关联的。这意味着当您调用
f(my_list)
时,值
my_list
引用被传递到
f()
,而不是名称“my_list”

如果您打算打印变量名及其值,则需要进行某种反射(您的
列表\u打印机
方法正在进行反射),以便检查程序的当前状态并识别名为
的变量“my\u 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调试器,因为您基本上是手动重新创建调试器。

Er,如果您想传递对象本身,那么所有可怕的帧/求值内容有什么意义?为什么不直接打印(我的列表)?测试传递的对象的类(
isinstance()
)。如果是字符串,那么你可以做所有这些事情。如果不是字符串,就打印它。