<p>你可以为它编写一些装饰程序,例如:</p>
<pre><code>def eagergenerator(mygen):
class GeneratorWrapper:
def __init__(self, *args, **kwargs):
self.g = mygen(*args, **kwargs)
self.last = next(self.g)
def __iter__(self):
return self
def __next__(self):
if self.last is self:
raise StopIteration
fake_yield = self.last
try:
self.last = next(self.g)
return fake_yield
except StopIteration:
self.last = self
return fake_yield
return GeneratorWrapper
</code></pre>
<p>然后您可以简单地装饰您的普通发电机:</p>
<pre><code>@eagergenerator
def G():
print("one")
yield 1
print("two")
yield 2
</code></pre>
<p>其工作原理如下:</p>
<pre><code>>>> g = G()
one
>>> next(g)
two
1
>>> next(g)
2
>>> next(g)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "eagergen.py", line 10, in __next__
raise StopIteration
StopIteration
>>>
</code></pre>