是否有类似反向的eval()函数?

时间:2019-03-25 10:07:40

标签: python eval

想象一下以下问题:您在python中有一些内容的字典,并且想要生成将创建此字典的python代码。 (就像评估,但相反) 有什么可以做到的吗?

场景: 我正在使用远程python解释器。我可以给它源文件,但没有输入。因此,我现在正在寻找一种将输入数据编码为python源文件的方法。

示例:

d = {'a': [1,4,7]}
str_d = reverse_eval(d)
# "{'a': [1, 4, 7]}"
eval(str_d) == d

2 个答案:

答案 0 :(得分:7)

repr(thing)

将输出文本,该文本在执行时(在大多数情况下)将重现字典。

答案 1 :(得分:1)

实际上,对于要存在此反向功能的数据类型非常重要。如果您在谈论内置/标准类,通常 .__repr__()方法将返回您要访问的代码。但是,如果您的目标是将内容保存为人类可读的格式,但要使用类似eval的函数在python中使用此数据,则有一个json库。 出于这个原因,最好使用json,因为使用eval是不安全的。 Json的问题是它不能保存任何类型的数据,它只能保存标准对象,但是如果我们谈论的不是内置数据类型,那你永远不知道那是什么他们的.__repr__(),因此无法对此类数据使用repr-eval

因此,对于所有类型的数据都没有反向功能,您可以将repr-eval用于内置数据,但是对于内置数据,json库至少要好一些,因为它是安全的