Python定义和调用由string表示的函数

时间:2017-10-20 14:52:50

标签: python string function compilation runtime

假设我们有一个字符串

function_string = 'def main():\n\treturn(1)'

如何在运行时将其编译为函数然后执行?

这是我目前的尝试,不幸的是它引发了一个NameError,表示main未定义:

self.run():
    exec(self.formatted_function_string) # similar to 'function_string' in the example
    print(main())

1 个答案:

答案 0 :(得分:0)

正如我在评论中所说,执行/评估任意字符串是一种安全风险。但是如果你真的想要这样做,你需要传递exec一个适当的全局字典。这里的自然选择是将globals() dict传递给它,以便exec定义的任何名称都放入全局命名空间。

def test(argstring):
    exec(argstring, globals())
    print(main())

function_string = 'def main():\n\treturn(1)'
test(function_string)
print(main)

典型输出

1
<function main at 0xb7196cd4>