擅长:python、mysql、java
<p>现在,实际上您仍然在这里使用<code>while</code>循环,但我认为这在精神上更接近于您的想法:</p>
<pre><code>def myrange(limit=0):
counter = 0
while counter < limit:
next = yield counter
try:
counter = int(next) - 1
except TypeError:
counter += 1
mylist = ['zero', 'one', 'two', 'five', 'four']
my_iter = myrange(len(mylist))
for i in my_iter:
print(mylist[i])
if mylist[i] == 'five':
print(' three, sir! ')
mylist[i] = 'three!'
my_iter.send(i)
elif mylist[i] == 'four':
print("Don't count that number!")
</code></pre>
<p>这是因为生成器具有<a href="https://docs.python.org/3.5/reference/expressions.html#generator.send" rel="nofollow">^{<cd2>}</a>函数。它们允许您向生成器发送一个值,然后生成器可以按其希望的方式使用该值。请注意,当您在生成器上调用<code>.send()</code>时,它将生成下一个值(因此,当我们调用<code>my_iter.send(i)</code>时,它实际上是<code>yield</code>生成下一个值。这就是为什么我们称<code>counter = int(next) - 1</code>。另一种方法是将<code>-1</code>放入<code>for</code>循环中。在</p>