擅长:python、mysql、java
<p>Python的行为实际上是按定义的。<b>创建了三个独立的函数</b>,但每个函数都具有在</b>中定义的环境的<b>闭包—在本例中,是全局环境(如果循环放在另一个函数中,则是外部函数的环境)。不过,这正是问题所在,在这个环境中,<b>i发生了变异,所有的闭包都指向同一个i<b>。</p>
<p>这是我能想到的最好的解决方案-创建一个函数creater并调用<I>来代替它。这将为每个创建的函数强制<b>不同的环境</b>,每个函数中有一个<b>不同的i</b>。</p>
<pre><code>flist = []
for i in xrange(3):
def funcC(j):
def func(x): return x * j
return func
flist.append(funcC(i))
for f in flist:
print f(2)
</code></pre>
<p>当你把副作用和函数式编程混合在一起时,就会发生这种情况。</p>