不直接。允许生成器用于实现协同例程,资源管理等的灵活性的一部分是,它们始终是一次性的。一旦运行,发电机将无法重新运行。您将必须创建一个新的生成器对象。
但是,您可以创建自己的覆盖的类__iter__()
。它将像可重用的生成器一样工作:
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)