擅长:python、mysql、java
<p>exec/eval的问题是它们可以执行任意代码。因此,要使用<code>exec</code>或<code>eval</code>,您需要仔细分析代码片段以确保它不包含恶意代码(这是一项非常困难的任务),或者确保代码的源是可信的。如果你在制作一个个人使用的小程序,那就没问题了。一个负责敏感数据或资金的大型程序,绝对不是。看起来你的用例被视为拥有一个可信的来源。在</p>
<p>如果您只想在运行时创建一个任意函数,那么只需使用lambda表达式和<code>eval</code>的组合。例如</p>
<pre><code>func_str = "lambda x: x + 1" # equates to f(x)=x+1
func = eval(func_str)
assert func(4) == 5
</code></pre>
<p>您的尝试无效的原因是<code>locals()</code>,在函数上下文中,创建了本地名称空间的<em>副本</em>。对生成的字典的更改不会影响当前的本地命名空间。你需要做一些类似的事情:</p>
^{pr2}$