如何在Python3.x中从字符串实例化函数?

如何在Python3.x中从字符串实例化函数?,python,python-3.x,Python,Python 3.x,我有一个字符串,其中包含函数的全文: my_str = 'def my_fn(a, b):\n return a+b' 我希望我的程序能够实例化my_func,将其保存到一个对象中,然后调用它 exec(my_str)在命令行中查看时返回,但在运行时未定义eval(my_str)返回一个SyntaxError:invalid syntax,这不是我想要的 我在这里感到困惑。如何从这个字符串中获取函数变量 如果我可以在以后将函数重命名为其他函数(一开始不知道它的名称),这将是一个很好的奖励

我有一个字符串,其中包含函数的全文:

my_str = 'def my_fn(a, b):\n    return a+b'
我希望我的程序能够实例化
my_func
,将其保存到一个对象中,然后调用它

exec(my_str)
在命令行中查看时返回
,但在运行时未定义
eval(my_str)
返回一个
SyntaxError:invalid syntax
,这不是我想要的

我在这里感到困惑。如何从这个字符串中获取函数变量

如果我可以在以后将函数重命名为其他函数(一开始不知道它的名称),这将是一个很好的奖励


注意:我知道使用
exec
是危险的。如果有更好的方法,我愿意接受建议。目前,这只是一个研究代码。它是在本地运行的,我向人们展示如何使用它,而不是在互联网上运行。

我想你是想这样做的
exec(my_str,globals())

当我使用
exec(my_str)
时,我可以调用你的函数。不管怎样,从字符串运行任意代码几乎从来都不是你想做的事情,你想在这里做什么?@user3483203它可以工作,或者我在我的终端上没有问题。问题是,在运行时,在
exec(my_str)
之后,
my_fn
仍然没有定义。(或者这是一个关于能够在我的程序上执行任意代码的笑话。你没有错:P)你在运行时是什么意思?我在脚本、终端等中运行您的函数没有问题。我正在开发一个研究程序,允许用户传入一个修改其数据的函数。作为其中的一部分,我需要一种存储该函数以供以后使用的方法。我想将函数源(他们键入的)存储为JSON字符串的一部分。这不是一种非常优雅的方法,但考虑到用户在本地使用自己的数据运行程序,目前风险是可以接受的。如何确保用户始终为函数提供正确的名称?@sundance使用
eval
时出错。使用
exec
时没有语法错误,可能不是
globals()
,而是您自己创建的字典。您可以从该字典访问该函数。这样,用户调用函数的方式就无关紧要了:只需选择exec之后的唯一函数,或者如果字典中没有函数或函数不止一个,就可以进行投诉。此外,用户不能意外地(?)覆盖
globals()
中存在的内容。