擅长:python、mysql、java
<p>问题是,您只在调用函数</em>时计算ev<em>。因此,它只在启动print语句时使用<code>ev</code>的任何值。当然,到那时,<code>ev</code>已经有了列表中最后一个函数的值。在</p>
<p>这和你这样做没有什么不同:</p>
<pre><code>funcs = [lambda x: ev.eval(x+0.1),
lambda x: ev.eval(x+0.1),
lambda x: ev.eval(x+0.1)]
</code></pre>
<p>注意它们是如何使用<code>ev</code>,并且在您运行这些函数时,它们都将使用相同的<em>相同的</em><code>ev</code>。在</p>
<p>要想做什么,您需要在定义理解时将<code>ev</code>绑定到列表理解中的当前值,您可以通过lambda参数传递值来实现:</p>
^{pr2}$
<p>但是,我强烈建议你这样做。正如您刚刚经历的,这样的代码很难理解和调试。在一行代码中尽可能多地使用功能是没有好处的。在</p>
<p>技术术语是闭包。有关详细信息,请查看stackoverflow上的以下问题:
<a href="https://stackoverflow.com/q/4020419/7432">Why aren't python nested functions called closures?</a></p>