擅长:python、mysql、java
<p>我猜您在列表理解中创建的lambda绑定到变量I,该变量最终为5。因此,当您在事后评估lambda时,它们都被绑定为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>