【发布时间】:2019-10-21 22:52:29
【问题描述】:
eval、exec、ast.literal_eval 有实际用途吗?我在实际使用中看到它们的唯一情况是,如果将诸如 python 对象之类的东西保存到文件中并且没有被腌制或其他任何东西。
使用这些函数有哪些实际的重要用例?我能够在文档中找到的唯一示例是:
>>> x = 1 >>> eval('x+1') 2
【问题讨论】:
-
当然可以在任何时候动态执行python代码。
-
见Are questions asking for further use cases for "feature x" on-topic?——此类问题几乎总是过于宽泛,无法在此提出。
-
...也就是说,Using Python's
eval()vsliteral_eval()? 至少回答了这个问题的一个重要角落;和What's the difference betweeneval(),exec()andcompile()? 回答另一个。我们有多个问题(在某些情况下相当全面)处理子集是另一个强烈信号,表明问题过于宽泛。 -
(顺便说一句,请注意后者已经很老了;关于什么是主题/范围内的规则已经随着时间而改变)。
-
举个具体的例子,几个回答Read data from CSV file and transform from string to correct data-type, including a list-of-integer column的问题使用
ast.literal_eval()。旧版本的内置namedtuples函数也使用它来动态创建一个类。作者还为它发了recipe。