<p>这里的问题在于lambda和i。稍后只保存i的最后一个值。因此,可以这样尝试:</p>
<p><strong>最小<em>不工作</em>示例</strong>:</p>
<pre><code>>>> def test(a):
... print a
... x = []
... for i in range(2):
... x.append(lambda: test(i))
... x
14: [<function <lambda> at 0x027FBA30>, <function <lambda> at 0x027FBAF0>]
>>> x[0]() # is supposed to print 0 not 1
1
>>> x[1]()
1
</code></pre>
<p><strong>最小工作示例</strong>:</p>
<pre><code>>>> def test(a):
... print a
... x = []
... for i in range(2):
... x.append((lambda x: (lambda:test(x)))(i) )
... x
16: [<function <lambda> at 0x027FBBF0>, <function <lambda> at 0x027FBBB0>]
>>> x[0]()
0
>>> x[1]()
1
</code></pre>
<p><strong>发生了什么?</strong></p>
<p>在第二个例子中,我让outter<code>lambda</code>函数返回一个函数。outter<code>lambda</code>函数将由输入<code>i</code>返回一个内置了这个<code>i</code>的函数来计算。因此<code>i</code>的值被单独保存,并且事情按预期工作。你知道吗</p>
<p><strong>解决方案</strong></p>
<p>因此,您的解决方案可以如下所示:</p>
<pre><code>for i in range(1, 11):
...connect((lambda x:(lambda: self.Desc(x)))(i))
...connect((lambda x:(lambda: self.DescRate(x)))(i))
</code></pre>
<p>干杯!你知道吗</p>