擅长:python、mysql、java
<p>不是直接的。允许生成器用于实现共同例程、资源管理等的灵活性的一部分是,它们总是一次性的。一旦运行,发电机就不能重新运行。您必须创建一个新的生成器对象。</p>
<p>但是,您可以创建自己的类来重写<code>__iter__()</code>。它就像一个可重复使用的发电机:</p>
<pre><code>def multigen(gen_func):
class _multigen(object):
def __init__(self, *args, **kwargs):
self.__args = args
self.__kwargs = kwargs
def __iter__(self):
return gen_func(*self.__args, **self.__kwargs)
return _multigen
@multigen
def myxrange(n):
i = 0
while i < n:
yield i
i += 1
m = myxrange(5)
print list(m)
print list(m)
</code></pre>