繁体   English   中英

Python 与 eval() 相对

[英]Python opposite of eval()

是否可以在 python 中与将输入视为文字字符串的eval()相反? 例如f(Node(2)) -> 'Node(2)'或者如果有某种高阶运算符停止解释输入,如 lisp 的quote()运算符。

Python 是否有quote的答案是否定的,Python 没有quote 没有同质性,也没有本地基础设施来表示语言自己的源代码。

现在看看eval的反面:你似乎错过了这里的图片的某些部分。 Python 的evalquote不是相反的。 可以将三种类型的值表示为:未解析的字符串、表达式和值(任何类型)。

  • quote和 LISP 风格的“ eval ”在表达式和值之间转换。
  • 解析和漂亮的打印在表达式和字符串之间形成了另一对。
  • Python 的实际eval直接从字符串到值,而repr则返回(在打印可解析值1的意义上)。

由于 SO 不支持绘图:

在此处输入图像描述

因此,如果您正在寻找eval的反义词,它要么是微不足道的repr ,但这可能对您没有帮助,或者如果 Python 中有引用,那将是quote和漂亮打印的组合。

这种与字符串的组合函数有点麻烦,这就是为什么 LISP 让读者一劳永逸地处理解析,从那时起,表达式和值之间只有 go。 实际上,我不知道任何具有这种“引用+打印”function 的语言(C# 的nameof接近,但仅限于名称)。

关于图表的一些注意事项:

  1. 它不会通勤:你已经处理了纯值或无视副作用,当然,最重要的是,从某种意义上说, quote并不是真正的 function。 这是一种特殊的形式 这就是为什么repr(x)通常与prettyprint(quote(x))不同的原因。
  2. 它没有描绘成对的同构。 多个表达式可以eval为相同的值等。

1在现实中并非总是如此,但这就是它所应有的目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM