我需要将输入字符串(来自数据库)编译为函数并运行它。这是我目前使用的方法:
假设我已经定义了这个函数:
def foo():
print "Yo foo! I am a function!"
我从数据库中读取的字符串说我应该调用这个函数:
string_from_db = "foo()"
然后我形成一个函数(我可以控制它的名字),它返回我从数据库中读取的函数:
my_func_string = "def doTheFunc():\n\t return " + string_from_db
现在我编译字符串,并将其设置为稍后用于处理的函数名称:
exec my_func_string
processor = doTheFunc
我可以稍后通过运行processor()
which 来调用它:Yo foo! I am a function!
我的问题:在这段代码上方有一条评论(由一位失散多年的开发人员留下):
###############################################################
# The following method for getting a function out of the text #
# in the database could potentially be replaced by using #
# Python's ast module to obtain an abstract syntax tree and #
# put it inside of a function node #
###############################################################
我想了解更多关于这个“潜在替代品”的信息。我看过 AST,但我很困惑它如何帮助我做我已经用上面的代码做的事情。
- 我怎样才能使用 AST 完成同样的事情?或者 AST 在这个过程中可以在哪里帮助我?
- 使用 AST 的实现是否更好,为什么?