擅长:python、mysql、java
<p>让我们仔细看看以下循环的每个迭代的外观:</p>
<pre><code>for value in self.dataSource:
yield self.dataSource[value]
</code></pre>
<p>假设<code>self.dataSource</code>是列表<code>[2, 3, 5, 6, 6, 7]</code>:</p>
<ul>
<li>第一次迭代:<code>value</code>将是<code>2</code>,<code>self.dataSource[2]</code>将是第三个元素,或者{<cd6>}</li>
<li>第二次迭代:<code>value</code>将是<code>3</code>,<code>self.dataSource[3]</code>将是第四个元素,或者{<cd10>}</li>
<li>第三次迭代:<code>value</code>将是<code>5</code>,<code>self.dataSource[5]</code>将是第6个元素,或者{<cd14>}</li>
<li>第四次迭代:<code>value</code>将是<code>6</code>,<code>self.dataSource[6]</code>导致{<cd18>}</li>
</ul>
<p>你的问题是你直接在列表中的元素上循环,而不是索引。您要执行以下操作之一:</p>
^{pr2}$
<p>或者。。。在</p>
<pre><code>for i in range(len(self.dataSource)):
yield self.dataSource[i]
</code></pre>
<p>显然,第一种方法是首选的,第二种方法只是说明了如果您需要的话,如何获得索引。在</p>
<p>请注意,在Python3.3及更高版本中,您只需使用<code>yield from self.dataSource</code>来获得与<code>for value in self.dataSource: yield value</code>相同的行为。在</p>