[英]Python opposite of eval()
是否可以在 python 中与将输入视为文字字符串的eval()
相反? 例如f(Node(2)) -> 'Node(2)'
或者如果有某种高阶运算符停止解释输入,如 lisp 的quote()
运算符。
Python 是否有quote
的答案是否定的,Python 没有quote
。 没有同质性,也没有本地基础设施来表示语言自己的源代码。
现在看看eval
的反面:你似乎错过了这里的图片的某些部分。 Python 的eval
与quote
不是相反的。 可以将三种类型的值表示为:未解析的字符串、表达式和值(任何类型)。
quote
和 LISP 风格的“ eval
”在表达式和值之间转换。eval
直接从字符串到值,而repr
则返回(在打印可解析值1的意义上)。由于 SO 不支持绘图:
因此,如果您正在寻找eval
的反义词,它要么是微不足道的repr
,但这可能对您没有帮助,或者如果 Python 中有引用,那将是quote
和漂亮打印的组合。
这种与字符串的组合函数有点麻烦,这就是为什么 LISP 让读者一劳永逸地处理解析,从那时起,表达式和值之间只有 go。 实际上,我不知道任何具有这种“引用+打印”function 的语言(C# 的nameof
接近,但仅限于名称)。
关于图表的一些注意事项:
quote
并不是真正的 function。 这是一种特殊的形式。 这就是为什么repr(x)
通常与prettyprint(quote(x))
不同的原因。eval
为相同的值等。1在现实中并非总是如此,但这就是它所应有的目的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.