擅长:python、mysql、java
<p>我猜你在列表理解中创建的lambda被绑定到变量I,它最终以5结束。因此,当你在事后评估lambdas时,它们都被绑定到5,最后计算出25。在第二个例子中,num也发生了同样的事情。当你在循环中计算lambda时,它的num没有改变,所以你得到了正确的值。循环之后,num是5。。。</p>
<p>我不太清楚你要干什么,所以我不知道如何提出解决办法。这个怎么样?</p>
<pre><code>def square(x): return lambda : x*x
listOfLambdas = [square(i) for i in [1,2,3,4,5]]
for f in listOfLambdas: print f()
</code></pre>
<p>这给了我预期的输出:</p>
<pre><code>1
4
9
16
25
</code></pre>
<p>另一种方法是lambda在创建它的时候“捕获”它的词汇环境。因此,如果给它<strong>num</strong>它实际上不会解析该值,直到它被调用。这既令人困惑,又很强大。</p>