擅长:python、mysql、java
<p>循环中定义的函数在其值更改时继续访问同一变量<code>i</code>。在循环结束时,所有函数都指向同一个变量,该变量保存循环中的最后一个值:示例中报告的效果。</p>
<p>为了计算<code>i</code>并使用其值,一种常见的模式是将其设置为参数默认值:当执行<code>def</code>语句时计算参数默认值,从而冻结循环变量的值。</p>
<p>以下工作符合预期:</p>
<pre><code>flist = []
for i in xrange(3):
def func(x, i=i): # the *value* of i is copied in func() environment
return x * i
flist.append(func)
for f in flist:
print f(2)
</code></pre>